! function (e, t) { "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? module.exports = t() : e.salvattore = t() }(this, function () { window.matchMedia || (window.matchMedia = function () { "use strict"; var e = window.styleMedia || window.media; if (!e) { var t = document.createElement("style"), n = document.getElementsByTagName("script")[0], r = null; t.type = "text/css", t.id = "matchmediajs-test", n.parentNode.insertBefore(t, n), r = "getComputedStyle" in window && window.getComputedStyle(t, null) || t.currentStyle, e = { matchMedium: function (e) { var n = "@media " + e + "{ #matchmediajs-test { width: 1px; } }"; return t.styleSheet ? t.styleSheet.cssText = n : t.textContent = n, "1px" === r.width } } } return function (t) { return { matches: e.matchMedium(t || "all"), media: t || "all" } } }()), function () { "use strict"; if (window.matchMedia && window.matchMedia("all").addListener) return !1; var e = window.matchMedia, t = e("only all").matches, n = !1, r = 0, a = [], i = function (t) { clearTimeout(r), r = setTimeout(function () { for (var t = 0, n = a.length; n > t; t++) { var r = a[t].mql, i = a[t].listeners || [], o = e(r.media).matches; if (o !== r.matches) { r.matches = o; for (var c = 0, l = i.length; l > c; c++) i[c].call(window, r) } } }, 30) }; window.matchMedia = function (r) { var o = e(r), c = [], l = 0; return o.addListener = function (e) { t && (n || (n = !0, window.addEventListener("resize", i, !0)), 0 === l && (l = a.push({ mql: o, listeners: c })), c.push(e)) }, o.removeListener = function (e) { for (var t = 0, n = c.length; n > t; t++) c[t] === e && c.splice(t, 1) }, o } }(), function () { "use strict"; for (var e = 0, t = ["ms", "moz", "webkit", "o"], n = 0; n < t.length && !window.requestAnimationFrame; ++n) window.requestAnimationFrame = window[t[n] + "RequestAnimationFrame"], window.cancelAnimationFrame = window[t[n] + "CancelAnimationFrame"] || window[t[n] + "CancelRequestAnimationFrame"]; window.requestAnimationFrame || (window.requestAnimationFrame = function (t, n) { var r = (new Date).getTime(), a = Math.max(0, 16 - (r - e)), i = window.setTimeout(function () { t(r + a) }, a); return e = r + a, i }), window.cancelAnimationFrame || (window.cancelAnimationFrame = function (e) { clearTimeout(e) }) }(), "function" != typeof window.CustomEvent && ! function () { "use strict"; function e(e, t) { t = t || { bubbles: !1, cancelable: !1, detail: void 0 }; var n = document.createEvent("CustomEvent"); return n.initCustomEvent(e, t.bubbles, t.cancelable, t.detail), n } e.prototype = window.Event.prototype, window.CustomEvent = e }(); var e = function (e, t, n) { "use strict"; var r = {}, a = [], i = [], o = [], c = function (e, t, n) { e.dataset ? e.dataset[t] = n : e.setAttribute("data-" + t, n) }; return r.obtainGridSettings = function (t) { var n = e.getComputedStyle(t, ":before"), r = n.getPropertyValue("content").slice(1, -1), a = r.match(/^\s*(\d+)(?:\s?\.(.+))?\s*$/), i = 1, o = []; return a ? (i = a[1], o = a[2], o = o ? o.split(".") : ["column"]) : (a = r.match(/^\s*\.(.+)\s+(\d+)\s*$/), a && (o = a[1], i = a[2], i && (i = i.split(".")))), { numberOfColumns: i, columnClasses: o } }, r.addColumns = function (e, n) { for (var a, i = r.obtainGridSettings(e), o = i.numberOfColumns, l = i.columnClasses, s = new Array(+o), u = t.createDocumentFragment(), d = o; 0 !== d--;) a = "[data-columns] > *:nth-child(" + o + "n-" + d + ")", s.push(n.querySelectorAll(a)); s.forEach(function (e) { var n = t.createElement("div"), r = t.createDocumentFragment(); n.className = l.join(" "), Array.prototype.forEach.call(e, function (e) { r.appendChild(e) }), n.appendChild(r), u.appendChild(n) }), e.appendChild(u), c(e, "columns", o) }, r.removeColumns = function (n) { var r = t.createRange(); r.selectNodeContents(n); var a = Array.prototype.filter.call(r.extractContents().childNodes, function (t) { return t instanceof e.HTMLElement }), i = a.length, o = a[0].childNodes.length, l = new Array(o * i); Array.prototype.forEach.call(a, function (e, t) { Array.prototype.forEach.call(e.children, function (e, n) { l[n * i + t] = e }) }); var s = t.createElement("div"); return c(s, "columns", 0), l.filter(function (e) { return !!e }).forEach(function (e) { s.appendChild(e) }), s }, r.recreateColumns = function (t) { e.requestAnimationFrame(function () { r.addColumns(t, r.removeColumns(t)); var e = new CustomEvent("columnsChange"); t.dispatchEvent(e) }) }, r.mediaQueryChange = function (e) { e.matches && Array.prototype.forEach.call(a, r.recreateColumns) }, r.getCSSRules = function (e) { var t; try { t = e.sheet.cssRules || e.sheet.rules } catch (e) { return [] } return t || [] }, r.getStylesheets = function () { var e = Array.prototype.slice.call(t.querySelectorAll("style")); return e.forEach(function (t, n) { "text/css" !== t.type && "" !== t.type && e.splice(n, 1) }), Array.prototype.concat.call(e, Array.prototype.slice.call(t.querySelectorAll("link[rel='stylesheet']"))) }, r.mediaRuleHasColumnsSelector = function (e) { var t, n; try { t = e.length } catch (e) { t = 0 } for (; t--;) if (n = e[t], n.selectorText && n.selectorText.match(/\[data-columns\](.*)::?before$/)) return !0; return !1 }, r.scanMediaQueries = function () { var t = []; if (e.matchMedia) { r.getStylesheets().forEach(function (e) { Array.prototype.forEach.call(r.getCSSRules(e), function (e) { try { e.media && e.cssRules && r.mediaRuleHasColumnsSelector(e.cssRules) && t.push(e) } catch (e) {} }) }); var n = i.filter(function (e) { return -1 === t.indexOf(e) }); o.filter(function (e) { return -1 !== n.indexOf(e.rule) }).forEach(function (e) { e.mql.removeListener(r.mediaQueryChange) }), o = o.filter(function (e) { return -1 === n.indexOf(e.rule) }), t.filter(function (e) { return -1 == i.indexOf(e) }).forEach(function (t) { var n = e.matchMedia(t.media.mediaText); n.addListener(r.mediaQueryChange), o.push({ rule: t, mql: n }) }), i.length = 0, i = t } }, r.rescanMediaQueries = function () { r.scanMediaQueries(), Array.prototype.forEach.call(a, r.recreateColumns) }, r.nextElementColumnIndex = function (e, t) { var n, r, a, i = e.children, o = i.length, c = 0, l = 0; for (a = 0; o > a; a++) n = i[a], r = n.children.length + (t[a].children || t[a].childNodes).length, 0 === c && (c = r), c > r && (l = a, c = r); return l }, r.createFragmentsList = function (e) { for (var n = new Array(e), r = 0; r !== e;) n[r] = t.createDocumentFragment(), r++; return n }, r.appendElements = function (e, t) { var n = e.children, a = n.length, i = r.createFragmentsList(a); Array.prototype.forEach.call(t, function (t) { var n = r.nextElementColumnIndex(e, i); i[n].appendChild(t) }), Array.prototype.forEach.call(n, function (e, t) { e.appendChild(i[t]) }) }, r.prependElements = function (e, n) { var a = e.children, i = a.length, o = r.createFragmentsList(i), c = i - 1; n.forEach(function (e) { var t = o[c]; t.insertBefore(e, t.firstChild), 0 === c ? c = i - 1 : c-- }), Array.prototype.forEach.call(a, function (e, t) { e.insertBefore(o[t], e.firstChild) }); for (var l = t.createDocumentFragment(), s = n.length % i; 0 !== s--;) l.appendChild(e.lastChild); e.insertBefore(l, e.firstChild) }, r.registerGrid = function (n) { if ("none" !== e.getComputedStyle(n).display) { var i = t.createRange(); i.selectNodeContents(n); var o = t.createElement("div"); o.appendChild(i.extractContents()), c(o, "columns", 0), r.addColumns(n, o), a.push(n) } }, r.init = function () { var e = t.createElement("style"); e.innerHTML = "[data-columns]::before{display:block;visibility:hidden;position:absolute;font-size:1px;}", t.head.appendChild(e); var n = t.querySelectorAll("[data-columns]"); Array.prototype.forEach.call(n, r.registerGrid), r.scanMediaQueries() }, r.init(), { appendElements: r.appendElements, prependElements: r.prependElements, registerGrid: r.registerGrid, recreateColumns: r.recreateColumns, rescanMediaQueries: r.rescanMediaQueries, init: r.init, append_elements: r.appendElements, prepend_elements: r.prependElements, register_grid: r.registerGrid, recreate_columns: r.recreateColumns, rescan_media_queries: r.rescanMediaQueries } }(window, window.document); return e });