a new start

This commit is contained in:
2025-10-25 12:39:30 +02:00
commit c97cadef78
726 changed files with 454051 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
{
"name": "html5shiv",
"version": "3.7.3",
"main": ["dist/html5shiv.js"],
"ignore": ["**/.*", "composer.json", "test", "build", "src", "build.xml"],
"homepage": "https://github.com/aFarkas/html5shiv",
"_release": "3.7.3",
"_resolution": {
"type": "version",
"tag": "3.7.3",
"commit": "ed28c56c071bddfe7d635ad88995674957a016be"
},
"_source": "https://github.com/aFarkas/html5shiv.git",
"_target": "^3.7.3",
"_originalSource": "html5shiv",
"_direct": true
}

View File

@@ -0,0 +1,61 @@
/*global module:false*/
module.exports = function (grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON("package.json"),
bower: grunt.file.readJSON("bower.json"),
copy: {
demo: {
files: [
{
expand: true,
src: ["src/*"],
dest: "dist/",
filter: "isFile",
flatten: true,
},
],
},
},
uglify: {
options: {
beautify: {
ascii_only: true,
},
preserveComments: "some",
},
html5shiv: {
files: [
{
expand: true, // Enable dynamic expansion.
cwd: "src/", // Src matches are relative to this path.
src: ["**/*.js"], // Actual pattern(s) to match.
dest: "dist/", // Destination path prefix.
ext: ".min.js",
},
],
},
},
watch: {
js: {
files: ["src/**/*.js"],
tasks: ["copy", "uglify", "bytesize"],
},
},
bytesize: {
all: {
src: ["dist/**.min.js"],
},
},
});
// Default task.
grunt.loadNpmTasks("grunt-contrib-copy");
grunt.loadNpmTasks("grunt-contrib-uglify");
grunt.loadNpmTasks("grunt-contrib-watch");
grunt.loadNpmTasks("grunt-bytesize");
grunt.registerTask("default", ["copy", "uglify", "bytesize", "watch"]);
};

View File

@@ -0,0 +1,6 @@
{
"name": "html5shiv",
"version": "3.7.3",
"main": ["dist/html5shiv.js"],
"ignore": ["**/.*", "composer.json", "test", "build", "src", "build.xml"]
}

View File

@@ -0,0 +1,542 @@
/**
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
(function (window, document) {
/*jshint evil:true */
/** version */
var version = "3.7.3";
/** Preset options */
var options = window.html5 || {};
/** Used to skip problem elements */
var reSkip =
/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
/** Not all elements can be cloned in IE **/
var saveClones =
/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
/** Detect whether the browser supports default html5 styles */
var supportsHtml5Styles;
/** Name of the expando, to work with multiple documents or to re-shiv one document */
var expando = "_html5shiv";
/** The id for the the documents expando */
var expanID = 0;
/** Cached data for each document */
var expandoData = {};
/** Detect whether the browser supports unknown elements */
var supportsUnknownElements;
(function () {
try {
var a = document.createElement("a");
a.innerHTML = "<xyz></xyz>";
//if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
supportsHtml5Styles = "hidden" in a;
supportsUnknownElements =
a.childNodes.length == 1 ||
(function () {
// assign a false positive if unable to shiv
document.createElement("a");
var frag = document.createDocumentFragment();
return (
typeof frag.cloneNode == "undefined" ||
typeof frag.createDocumentFragment == "undefined" ||
typeof frag.createElement == "undefined"
);
})();
} catch (e) {
// assign a false positive if detection fails => unable to shiv
supportsHtml5Styles = true;
supportsUnknownElements = true;
}
})();
/*--------------------------------------------------------------------------*/
/**
* Creates a style sheet with the given CSS text and adds it to the document.
* @private
* @param {Document} ownerDocument The document.
* @param {String} cssText The CSS text.
* @returns {StyleSheet} The style element.
*/
function addStyleSheet(ownerDocument, cssText) {
var p = ownerDocument.createElement("p"),
parent =
ownerDocument.getElementsByTagName("head")[0] ||
ownerDocument.documentElement;
p.innerHTML = "x<style>" + cssText + "</style>";
return parent.insertBefore(p.lastChild, parent.firstChild);
}
/**
* Returns the value of `html5.elements` as an array.
* @private
* @returns {Array} An array of shived element node names.
*/
function getElements() {
var elements = html5.elements;
return typeof elements == "string" ? elements.split(" ") : elements;
}
/**
* Extends the built-in list of html5 elements
* @memberOf html5
* @param {String|Array} newElements whitespace separated list or array of new element names to shiv
* @param {Document} ownerDocument The context document.
*/
function addElements(newElements, ownerDocument) {
var elements = html5.elements;
if (typeof elements != "string") {
elements = elements.join(" ");
}
if (typeof newElements != "string") {
newElements = newElements.join(" ");
}
html5.elements = elements + " " + newElements;
shivDocument(ownerDocument);
}
/**
* Returns the data associated to the given document
* @private
* @param {Document} ownerDocument The document.
* @returns {Object} An object of data.
*/
function getExpandoData(ownerDocument) {
var data = expandoData[ownerDocument[expando]];
if (!data) {
data = {};
expanID++;
ownerDocument[expando] = expanID;
expandoData[expanID] = data;
}
return data;
}
/**
* returns a shived element for the given nodeName and document
* @memberOf html5
* @param {String} nodeName name of the element
* @param {Document} ownerDocument The context document.
* @returns {Object} The shived element.
*/
function createElement(nodeName, ownerDocument, data) {
if (!ownerDocument) {
ownerDocument = document;
}
if (supportsUnknownElements) {
return ownerDocument.createElement(nodeName);
}
if (!data) {
data = getExpandoData(ownerDocument);
}
var node;
if (data.cache[nodeName]) {
node = data.cache[nodeName].cloneNode();
} else if (saveClones.test(nodeName)) {
node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
} else {
node = data.createElem(nodeName);
}
// Avoid adding some elements to fragments in IE < 9 because
// * Attributes like `name` or `type` cannot be set/changed once an element
// is inserted into a document/fragment
// * Link elements with `src` attributes that are inaccessible, as with
// a 403 response, will cause the tab/window to crash
// * Script elements appended to fragments will execute when their `src`
// or `text` property is set
return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn
? data.frag.appendChild(node)
: node;
}
/**
* returns a shived DocumentFragment for the given document
* @memberOf html5
* @param {Document} ownerDocument The context document.
* @returns {Object} The shived DocumentFragment.
*/
function createDocumentFragment(ownerDocument, data) {
if (!ownerDocument) {
ownerDocument = document;
}
if (supportsUnknownElements) {
return ownerDocument.createDocumentFragment();
}
data = data || getExpandoData(ownerDocument);
var clone = data.frag.cloneNode(),
i = 0,
elems = getElements(),
l = elems.length;
for (; i < l; i++) {
clone.createElement(elems[i]);
}
return clone;
}
/**
* Shivs the `createElement` and `createDocumentFragment` methods of the document.
* @private
* @param {Document|DocumentFragment} ownerDocument The document.
* @param {Object} data of the document.
*/
function shivMethods(ownerDocument, data) {
if (!data.cache) {
data.cache = {};
data.createElem = ownerDocument.createElement;
data.createFrag = ownerDocument.createDocumentFragment;
data.frag = data.createFrag();
}
ownerDocument.createElement = function (nodeName) {
//abort shiv
if (!html5.shivMethods) {
return data.createElem(nodeName);
}
return createElement(nodeName, ownerDocument, data);
};
ownerDocument.createDocumentFragment = Function(
"h,f",
"return function(){" +
"var n=f.cloneNode(),c=n.createElement;" +
"h.shivMethods&&(" +
// unroll the `createElement` calls
getElements()
.join()
.replace(/[\w\-:]+/g, function (nodeName) {
data.createElem(nodeName);
data.frag.createElement(nodeName);
return 'c("' + nodeName + '")';
}) +
");return n}",
)(html5, data.frag);
}
/*--------------------------------------------------------------------------*/
/**
* Shivs the given document.
* @memberOf html5
* @param {Document} ownerDocument The document to shiv.
* @returns {Document} The shived document.
*/
function shivDocument(ownerDocument) {
if (!ownerDocument) {
ownerDocument = document;
}
var data = getExpandoData(ownerDocument);
if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
data.hasCSS = !!addStyleSheet(
ownerDocument,
// corrects block display not defined in IE6/7/8/9
"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}" +
// adds styling not present in IE6/7/8/9
"mark{background:#FF0;color:#000}" +
// hides non-rendered elements
"template{display:none}",
);
}
if (!supportsUnknownElements) {
shivMethods(ownerDocument, data);
}
return ownerDocument;
}
/*--------------------------------------------------------------------------*/
/**
* The `html5` object is exposed so that more elements can be shived and
* existing shiving can be detected on iframes.
* @type Object
* @example
*
* // options can be changed before the script is included
* html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
*/
var html5 = {
/**
* An array or space separated string of node names of the elements to shiv.
* @memberOf html5
* @type Array|String
*/
elements:
options.elements ||
"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",
/**
* current version of html5shiv
*/
version: version,
/**
* A flag to indicate that the HTML5 style sheet should be inserted.
* @memberOf html5
* @type Boolean
*/
shivCSS: options.shivCSS !== false,
/**
* Is equal to true if a browser supports creating unknown/HTML5 elements
* @memberOf html5
* @type boolean
*/
supportsUnknownElements: supportsUnknownElements,
/**
* A flag to indicate that the document's `createElement` and `createDocumentFragment`
* methods should be overwritten.
* @memberOf html5
* @type Boolean
*/
shivMethods: options.shivMethods !== false,
/**
* A string to describe the type of `html5` object ("default" or "default print").
* @memberOf html5
* @type String
*/
type: "default",
// shivs the document according to the specified `html5` object options
shivDocument: shivDocument,
//creates a shived element
createElement: createElement,
//creates a shived documentFragment
createDocumentFragment: createDocumentFragment,
//extends list of elements
addElements: addElements,
};
/*--------------------------------------------------------------------------*/
// expose html5
window.html5 = html5;
// shiv the document
shivDocument(document);
/*------------------------------- Print Shiv -------------------------------*/
/** Used to filter media types */
var reMedia = /^$|\b(?:all|print)\b/;
/** Used to namespace printable elements */
var shivNamespace = "html5shiv";
/** Detect whether the browser supports shivable style sheets */
var supportsShivableSheets =
!supportsUnknownElements &&
(function () {
// assign a false negative if unable to shiv
var docEl = document.documentElement;
return !(
typeof document.namespaces == "undefined" ||
typeof document.parentWindow == "undefined" ||
typeof docEl.applyElement == "undefined" ||
typeof docEl.removeNode == "undefined" ||
typeof window.attachEvent == "undefined"
);
})();
/*--------------------------------------------------------------------------*/
/**
* Wraps all HTML5 elements in the given document with printable elements.
* (eg. the "header" element is wrapped with the "html5shiv:header" element)
* @private
* @param {Document} ownerDocument The document.
* @returns {Array} An array wrappers added.
*/
function addWrappers(ownerDocument) {
var node,
nodes = ownerDocument.getElementsByTagName("*"),
index = nodes.length,
reElements = RegExp("^(?:" + getElements().join("|") + ")$", "i"),
result = [];
while (index--) {
node = nodes[index];
if (reElements.test(node.nodeName)) {
result.push(node.applyElement(createWrapper(node)));
}
}
return result;
}
/**
* Creates a printable wrapper for the given element.
* @private
* @param {Element} element The element.
* @returns {Element} The wrapper.
*/
function createWrapper(element) {
var node,
nodes = element.attributes,
index = nodes.length,
wrapper = element.ownerDocument.createElement(
shivNamespace + ":" + element.nodeName,
);
// copy element attributes to the wrapper
while (index--) {
node = nodes[index];
node.specified && wrapper.setAttribute(node.nodeName, node.nodeValue);
}
// copy element styles to the wrapper
wrapper.style.cssText = element.style.cssText;
return wrapper;
}
/**
* Shivs the given CSS text.
* (eg. header{} becomes html5shiv\:header{})
* @private
* @param {String} cssText The CSS text to shiv.
* @returns {String} The shived CSS text.
*/
function shivCssText(cssText) {
var pair,
parts = cssText.split("{"),
index = parts.length,
reElements = RegExp(
"(^|[\\s,>+~])(" + getElements().join("|") + ")(?=[[\\s,>+~#.:]|$)",
"gi",
),
replacement = "$1" + shivNamespace + "\\:$2";
while (index--) {
pair = parts[index] = parts[index].split("}");
pair[pair.length - 1] = pair[pair.length - 1].replace(
reElements,
replacement,
);
parts[index] = pair.join("}");
}
return parts.join("{");
}
/**
* Removes the given wrappers, leaving the original elements.
* @private
* @params {Array} wrappers An array of printable wrappers.
*/
function removeWrappers(wrappers) {
var index = wrappers.length;
while (index--) {
wrappers[index].removeNode();
}
}
/*--------------------------------------------------------------------------*/
/**
* Shivs the given document for print.
* @memberOf html5
* @param {Document} ownerDocument The document to shiv.
* @returns {Document} The shived document.
*/
function shivPrint(ownerDocument) {
var shivedSheet,
wrappers,
data = getExpandoData(ownerDocument),
namespaces = ownerDocument.namespaces,
ownerWindow = ownerDocument.parentWindow;
if (!supportsShivableSheets || ownerDocument.printShived) {
return ownerDocument;
}
if (typeof namespaces[shivNamespace] == "undefined") {
namespaces.add(shivNamespace);
}
function removeSheet() {
clearTimeout(data._removeSheetTimer);
if (shivedSheet) {
shivedSheet.removeNode(true);
}
shivedSheet = null;
}
ownerWindow.attachEvent("onbeforeprint", function () {
removeSheet();
var imports,
length,
sheet,
collection = ownerDocument.styleSheets,
cssText = [],
index = collection.length,
sheets = Array(index);
// convert styleSheets collection to an array
while (index--) {
sheets[index] = collection[index];
}
// concat all style sheet CSS text
while ((sheet = sheets.pop())) {
// IE does not enforce a same origin policy for external style sheets...
// but has trouble with some dynamically created stylesheets
if (!sheet.disabled && reMedia.test(sheet.media)) {
try {
imports = sheet.imports;
length = imports.length;
} catch (er) {
length = 0;
}
for (index = 0; index < length; index++) {
sheets.push(imports[index]);
}
try {
cssText.push(sheet.cssText);
} catch (er) {}
}
}
// wrap all HTML5 elements with printable elements and add the shived style sheet
cssText = shivCssText(cssText.reverse().join(""));
wrappers = addWrappers(ownerDocument);
shivedSheet = addStyleSheet(ownerDocument, cssText);
});
ownerWindow.attachEvent("onafterprint", function () {
// remove wrappers, leaving the original elements, and remove the shived style sheet
removeWrappers(wrappers);
clearTimeout(data._removeSheetTimer);
data._removeSheetTimer = setTimeout(removeSheet, 500);
});
ownerDocument.printShived = true;
return ownerDocument;
}
/*--------------------------------------------------------------------------*/
// expose API
html5.type += " print";
html5.shivPrint = shivPrint;
// shiv for print
shivPrint(document);
if (typeof module == "object" && module.exports) {
module.exports = html5;
}
})(typeof window !== "undefined" ? window : this, document);

View File

@@ -0,0 +1,230 @@
/**
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!(function (a, b) {
function c(a, b) {
var c = a.createElement("p"),
d = a.getElementsByTagName("head")[0] || a.documentElement;
return (
(c.innerHTML = "x<style>" + b + "</style>"),
d.insertBefore(c.lastChild, d.firstChild)
);
}
function d() {
var a = y.elements;
return "string" == typeof a ? a.split(" ") : a;
}
function e(a, b) {
var c = y.elements;
"string" != typeof c && (c = c.join(" ")),
"string" != typeof a && (a = a.join(" ")),
(y.elements = c + " " + a),
j(b);
}
function f(a) {
var b = x[a[v]];
return b || ((b = {}), w++, (a[v] = w), (x[w] = b)), b;
}
function g(a, c, d) {
if ((c || (c = b), q)) return c.createElement(a);
d || (d = f(c));
var e;
return (
(e = d.cache[a]
? d.cache[a].cloneNode()
: u.test(a)
? (d.cache[a] = d.createElem(a)).cloneNode()
: d.createElem(a)),
!e.canHaveChildren || t.test(a) || e.tagUrn ? e : d.frag.appendChild(e)
);
}
function h(a, c) {
if ((a || (a = b), q)) return a.createDocumentFragment();
c = c || f(a);
for (var e = c.frag.cloneNode(), g = 0, h = d(), i = h.length; i > g; g++)
e.createElement(h[g]);
return e;
}
function i(a, b) {
b.cache ||
((b.cache = {}),
(b.createElem = a.createElement),
(b.createFrag = a.createDocumentFragment),
(b.frag = b.createFrag())),
(a.createElement = function (c) {
return y.shivMethods ? g(c, a, b) : b.createElem(c);
}),
(a.createDocumentFragment = Function(
"h,f",
"return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(" +
d()
.join()
.replace(/[\w\-:]+/g, function (a) {
return b.createElem(a), b.frag.createElement(a), 'c("' + a + '")';
}) +
");return n}",
)(y, b.frag));
}
function j(a) {
a || (a = b);
var d = f(a);
return (
!y.shivCSS ||
p ||
d.hasCSS ||
(d.hasCSS = !!c(
a,
"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}",
)),
q || i(a, d),
a
);
}
function k(a) {
for (
var b,
c = a.getElementsByTagName("*"),
e = c.length,
f = RegExp("^(?:" + d().join("|") + ")$", "i"),
g = [];
e--;
)
(b = c[e]), f.test(b.nodeName) && g.push(b.applyElement(l(b)));
return g;
}
function l(a) {
for (
var b,
c = a.attributes,
d = c.length,
e = a.ownerDocument.createElement(A + ":" + a.nodeName);
d--;
)
(b = c[d]), b.specified && e.setAttribute(b.nodeName, b.nodeValue);
return (e.style.cssText = a.style.cssText), e;
}
function m(a) {
for (
var b,
c = a.split("{"),
e = c.length,
f = RegExp(
"(^|[\\s,>+~])(" + d().join("|") + ")(?=[[\\s,>+~#.:]|$)",
"gi",
),
g = "$1" + A + "\\:$2";
e--;
)
(b = c[e] = c[e].split("}")),
(b[b.length - 1] = b[b.length - 1].replace(f, g)),
(c[e] = b.join("}"));
return c.join("{");
}
function n(a) {
for (var b = a.length; b--; ) a[b].removeNode();
}
function o(a) {
function b() {
clearTimeout(g._removeSheetTimer), d && d.removeNode(!0), (d = null);
}
var d,
e,
g = f(a),
h = a.namespaces,
i = a.parentWindow;
return !B || a.printShived
? a
: ("undefined" == typeof h[A] && h.add(A),
i.attachEvent("onbeforeprint", function () {
b();
for (
var f, g, h, i = a.styleSheets, j = [], l = i.length, n = Array(l);
l--;
)
n[l] = i[l];
for (; (h = n.pop()); )
if (!h.disabled && z.test(h.media)) {
try {
(f = h.imports), (g = f.length);
} catch (o) {
g = 0;
}
for (l = 0; g > l; l++) n.push(f[l]);
try {
j.push(h.cssText);
} catch (o) {}
}
(j = m(j.reverse().join(""))), (e = k(a)), (d = c(a, j));
}),
i.attachEvent("onafterprint", function () {
n(e),
clearTimeout(g._removeSheetTimer),
(g._removeSheetTimer = setTimeout(b, 500));
}),
(a.printShived = !0),
a);
}
var p,
q,
r = "3.7.3",
s = a.html5 || {},
t = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,
u =
/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,
v = "_html5shiv",
w = 0,
x = {};
!(function () {
try {
var a = b.createElement("a");
(a.innerHTML = "<xyz></xyz>"),
(p = "hidden" in a),
(q =
1 == a.childNodes.length ||
(function () {
b.createElement("a");
var a = b.createDocumentFragment();
return (
"undefined" == typeof a.cloneNode ||
"undefined" == typeof a.createDocumentFragment ||
"undefined" == typeof a.createElement
);
})());
} catch (c) {
(p = !0), (q = !0);
}
})();
var y = {
elements:
s.elements ||
"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",
version: r,
shivCSS: s.shivCSS !== !1,
supportsUnknownElements: q,
shivMethods: s.shivMethods !== !1,
type: "default",
shivDocument: j,
createElement: g,
createDocumentFragment: h,
addElements: e,
};
(a.html5 = y), j(b);
var z = /^$|\b(?:all|print)\b/,
A = "html5shiv",
B =
!q &&
(function () {
var c = b.documentElement;
return !(
"undefined" == typeof b.namespaces ||
"undefined" == typeof b.parentWindow ||
"undefined" == typeof c.applyElement ||
"undefined" == typeof c.removeNode ||
"undefined" == typeof a.attachEvent
);
})();
(y.type += " print"),
(y.shivPrint = o),
o(b),
"object" == typeof module && module.exports && (module.exports = y);
})("undefined" != typeof window ? window : this, document);

View File

@@ -0,0 +1,337 @@
/**
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
(function (window, document) {
/*jshint evil:true */
/** version */
var version = "3.7.3";
/** Preset options */
var options = window.html5 || {};
/** Used to skip problem elements */
var reSkip =
/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
/** Not all elements can be cloned in IE **/
var saveClones =
/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
/** Detect whether the browser supports default html5 styles */
var supportsHtml5Styles;
/** Name of the expando, to work with multiple documents or to re-shiv one document */
var expando = "_html5shiv";
/** The id for the the documents expando */
var expanID = 0;
/** Cached data for each document */
var expandoData = {};
/** Detect whether the browser supports unknown elements */
var supportsUnknownElements;
(function () {
try {
var a = document.createElement("a");
a.innerHTML = "<xyz></xyz>";
//if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
supportsHtml5Styles = "hidden" in a;
supportsUnknownElements =
a.childNodes.length == 1 ||
(function () {
// assign a false positive if unable to shiv
document.createElement("a");
var frag = document.createDocumentFragment();
return (
typeof frag.cloneNode == "undefined" ||
typeof frag.createDocumentFragment == "undefined" ||
typeof frag.createElement == "undefined"
);
})();
} catch (e) {
// assign a false positive if detection fails => unable to shiv
supportsHtml5Styles = true;
supportsUnknownElements = true;
}
})();
/*--------------------------------------------------------------------------*/
/**
* Creates a style sheet with the given CSS text and adds it to the document.
* @private
* @param {Document} ownerDocument The document.
* @param {String} cssText The CSS text.
* @returns {StyleSheet} The style element.
*/
function addStyleSheet(ownerDocument, cssText) {
var p = ownerDocument.createElement("p"),
parent =
ownerDocument.getElementsByTagName("head")[0] ||
ownerDocument.documentElement;
p.innerHTML = "x<style>" + cssText + "</style>";
return parent.insertBefore(p.lastChild, parent.firstChild);
}
/**
* Returns the value of `html5.elements` as an array.
* @private
* @returns {Array} An array of shived element node names.
*/
function getElements() {
var elements = html5.elements;
return typeof elements == "string" ? elements.split(" ") : elements;
}
/**
* Extends the built-in list of html5 elements
* @memberOf html5
* @param {String|Array} newElements whitespace separated list or array of new element names to shiv
* @param {Document} ownerDocument The context document.
*/
function addElements(newElements, ownerDocument) {
var elements = html5.elements;
if (typeof elements != "string") {
elements = elements.join(" ");
}
if (typeof newElements != "string") {
newElements = newElements.join(" ");
}
html5.elements = elements + " " + newElements;
shivDocument(ownerDocument);
}
/**
* Returns the data associated to the given document
* @private
* @param {Document} ownerDocument The document.
* @returns {Object} An object of data.
*/
function getExpandoData(ownerDocument) {
var data = expandoData[ownerDocument[expando]];
if (!data) {
data = {};
expanID++;
ownerDocument[expando] = expanID;
expandoData[expanID] = data;
}
return data;
}
/**
* returns a shived element for the given nodeName and document
* @memberOf html5
* @param {String} nodeName name of the element
* @param {Document|DocumentFragment} ownerDocument The context document.
* @returns {Object} The shived element.
*/
function createElement(nodeName, ownerDocument, data) {
if (!ownerDocument) {
ownerDocument = document;
}
if (supportsUnknownElements) {
return ownerDocument.createElement(nodeName);
}
if (!data) {
data = getExpandoData(ownerDocument);
}
var node;
if (data.cache[nodeName]) {
node = data.cache[nodeName].cloneNode();
} else if (saveClones.test(nodeName)) {
node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
} else {
node = data.createElem(nodeName);
}
// Avoid adding some elements to fragments in IE < 9 because
// * Attributes like `name` or `type` cannot be set/changed once an element
// is inserted into a document/fragment
// * Link elements with `src` attributes that are inaccessible, as with
// a 403 response, will cause the tab/window to crash
// * Script elements appended to fragments will execute when their `src`
// or `text` property is set
return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn
? data.frag.appendChild(node)
: node;
}
/**
* returns a shived DocumentFragment for the given document
* @memberOf html5
* @param {Document} ownerDocument The context document.
* @returns {Object} The shived DocumentFragment.
*/
function createDocumentFragment(ownerDocument, data) {
if (!ownerDocument) {
ownerDocument = document;
}
if (supportsUnknownElements) {
return ownerDocument.createDocumentFragment();
}
data = data || getExpandoData(ownerDocument);
var clone = data.frag.cloneNode(),
i = 0,
elems = getElements(),
l = elems.length;
for (; i < l; i++) {
clone.createElement(elems[i]);
}
return clone;
}
/**
* Shivs the `createElement` and `createDocumentFragment` methods of the document.
* @private
* @param {Document|DocumentFragment} ownerDocument The document.
* @param {Object} data of the document.
*/
function shivMethods(ownerDocument, data) {
if (!data.cache) {
data.cache = {};
data.createElem = ownerDocument.createElement;
data.createFrag = ownerDocument.createDocumentFragment;
data.frag = data.createFrag();
}
ownerDocument.createElement = function (nodeName) {
//abort shiv
if (!html5.shivMethods) {
return data.createElem(nodeName);
}
return createElement(nodeName, ownerDocument, data);
};
ownerDocument.createDocumentFragment = Function(
"h,f",
"return function(){" +
"var n=f.cloneNode(),c=n.createElement;" +
"h.shivMethods&&(" +
// unroll the `createElement` calls
getElements()
.join()
.replace(/[\w\-:]+/g, function (nodeName) {
data.createElem(nodeName);
data.frag.createElement(nodeName);
return 'c("' + nodeName + '")';
}) +
");return n}",
)(html5, data.frag);
}
/*--------------------------------------------------------------------------*/
/**
* Shivs the given document.
* @memberOf html5
* @param {Document} ownerDocument The document to shiv.
* @returns {Document} The shived document.
*/
function shivDocument(ownerDocument) {
if (!ownerDocument) {
ownerDocument = document;
}
var data = getExpandoData(ownerDocument);
if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
data.hasCSS = !!addStyleSheet(
ownerDocument,
// corrects block display not defined in IE6/7/8/9
"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}" +
// adds styling not present in IE6/7/8/9
"mark{background:#FF0;color:#000}" +
// hides non-rendered elements
"template{display:none}",
);
}
if (!supportsUnknownElements) {
shivMethods(ownerDocument, data);
}
return ownerDocument;
}
/*--------------------------------------------------------------------------*/
/**
* The `html5` object is exposed so that more elements can be shived and
* existing shiving can be detected on iframes.
* @type Object
* @example
*
* // options can be changed before the script is included
* html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
*/
var html5 = {
/**
* An array or space separated string of node names of the elements to shiv.
* @memberOf html5
* @type Array|String
*/
elements:
options.elements ||
"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",
/**
* current version of html5shiv
*/
version: version,
/**
* A flag to indicate that the HTML5 style sheet should be inserted.
* @memberOf html5
* @type Boolean
*/
shivCSS: options.shivCSS !== false,
/**
* Is equal to true if a browser supports creating unknown/HTML5 elements
* @memberOf html5
* @type boolean
*/
supportsUnknownElements: supportsUnknownElements,
/**
* A flag to indicate that the document's `createElement` and `createDocumentFragment`
* methods should be overwritten.
* @memberOf html5
* @type Boolean
*/
shivMethods: options.shivMethods !== false,
/**
* A string to describe the type of `html5` object ("default" or "default print").
* @memberOf html5
* @type String
*/
type: "default",
// shivs the document according to the specified `html5` object options
shivDocument: shivDocument,
//creates a shived element
createElement: createElement,
//creates a shived documentFragment
createDocumentFragment: createDocumentFragment,
//extends list of elements
addElements: addElements,
};
/*--------------------------------------------------------------------------*/
// expose html5
window.html5 = html5;
// shiv the document
shivDocument(document);
if (typeof module == "object" && module.exports) {
module.exports = html5;
}
})(typeof window !== "undefined" ? window : this, document);

View File

@@ -0,0 +1,130 @@
/**
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!(function (a, b) {
function c(a, b) {
var c = a.createElement("p"),
d = a.getElementsByTagName("head")[0] || a.documentElement;
return (
(c.innerHTML = "x<style>" + b + "</style>"),
d.insertBefore(c.lastChild, d.firstChild)
);
}
function d() {
var a = t.elements;
return "string" == typeof a ? a.split(" ") : a;
}
function e(a, b) {
var c = t.elements;
"string" != typeof c && (c = c.join(" ")),
"string" != typeof a && (a = a.join(" ")),
(t.elements = c + " " + a),
j(b);
}
function f(a) {
var b = s[a[q]];
return b || ((b = {}), r++, (a[q] = r), (s[r] = b)), b;
}
function g(a, c, d) {
if ((c || (c = b), l)) return c.createElement(a);
d || (d = f(c));
var e;
return (
(e = d.cache[a]
? d.cache[a].cloneNode()
: p.test(a)
? (d.cache[a] = d.createElem(a)).cloneNode()
: d.createElem(a)),
!e.canHaveChildren || o.test(a) || e.tagUrn ? e : d.frag.appendChild(e)
);
}
function h(a, c) {
if ((a || (a = b), l)) return a.createDocumentFragment();
c = c || f(a);
for (var e = c.frag.cloneNode(), g = 0, h = d(), i = h.length; i > g; g++)
e.createElement(h[g]);
return e;
}
function i(a, b) {
b.cache ||
((b.cache = {}),
(b.createElem = a.createElement),
(b.createFrag = a.createDocumentFragment),
(b.frag = b.createFrag())),
(a.createElement = function (c) {
return t.shivMethods ? g(c, a, b) : b.createElem(c);
}),
(a.createDocumentFragment = Function(
"h,f",
"return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(" +
d()
.join()
.replace(/[\w\-:]+/g, function (a) {
return b.createElem(a), b.frag.createElement(a), 'c("' + a + '")';
}) +
");return n}",
)(t, b.frag));
}
function j(a) {
a || (a = b);
var d = f(a);
return (
!t.shivCSS ||
k ||
d.hasCSS ||
(d.hasCSS = !!c(
a,
"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}",
)),
l || i(a, d),
a
);
}
var k,
l,
m = "3.7.3",
n = a.html5 || {},
o = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,
p =
/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,
q = "_html5shiv",
r = 0,
s = {};
!(function () {
try {
var a = b.createElement("a");
(a.innerHTML = "<xyz></xyz>"),
(k = "hidden" in a),
(l =
1 == a.childNodes.length ||
(function () {
b.createElement("a");
var a = b.createDocumentFragment();
return (
"undefined" == typeof a.cloneNode ||
"undefined" == typeof a.createDocumentFragment ||
"undefined" == typeof a.createElement
);
})());
} catch (c) {
(k = !0), (l = !0);
}
})();
var t = {
elements:
n.elements ||
"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",
version: m,
shivCSS: n.shivCSS !== !1,
supportsUnknownElements: l,
shivMethods: n.shivMethods !== !1,
type: "default",
shivDocument: j,
createElement: g,
createDocumentFragment: h,
addElements: e,
};
(a.html5 = t),
j(b),
"object" == typeof module && module.exports && (module.exports = t);
})("undefined" != typeof window ? window : this, document);

View File

@@ -0,0 +1,16 @@
{
"name": "html5shiv",
"version": "3.7.3",
"repository": {
"type": "git",
"url": "https://github.com/aFarkas/html5shiv.git"
},
"main": "dist/html5shiv.js",
"devDependencies": {
"grunt-bytesize": ">=0.1.0",
"grunt-contrib-watch": ">=0.3.0",
"grunt-contrib-copy": ">=0.4.0",
"grunt-contrib-uglify": ">=0.2.7",
"grunt": ">=0.4.1"
}
}