Skip to content
This repository has been archived by the owner on Jun 7, 2024. It is now read-only.

Commit

Permalink
Make sure jQuery enhanced is being used in the right places (closes s…
Browse files Browse the repository at this point in the history
  • Loading branch information
marcoscaceres committed Mar 3, 2016
1 parent f30cf74 commit 63e3a61
Show file tree
Hide file tree
Showing 19 changed files with 328 additions and 303 deletions.
2 changes: 1 addition & 1 deletion js/core/best-practices.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// Best practices are marked up with span.practicelab.

define(
["text!core/css/bp.css", "jquery"],
["text!core/css/bp.css", "core/jquery-enhanced"],
function (css) {
return {
run: function (conf, doc, cb, msg) {
Expand Down
2 changes: 1 addition & 1 deletion js/core/biblio.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// - localBiblio: override or supplement the official biblio with your own.

define(
["jquery"],
["core/jquery-enhanced"],
function ($) {
var getRefKeys = function (conf) {
var informs = conf.informativeReferences
Expand Down
2 changes: 1 addition & 1 deletion js/core/dfn.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// Module core/dfn
// Finds all <dfn> elements and populates conf.definitionMap to identify them.
define(
["jquery"],
["core/jquery-enhanced"],
function ($) {
return {
run: function (conf, doc, cb, msg) {
Expand Down
2 changes: 1 addition & 1 deletion js/core/figures.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
// to be found as well as normalise the titles of figures.

define(
["jquery"],
["core/jquery-enhanced"],
function ($) {
return {
run: function (conf, doc, cb, msg) {
Expand Down
2 changes: 1 addition & 1 deletion js/core/fix-headers.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// h2) with the knowledge that the proper depth level will be used

define(
["jquery"],
["core/jquery-enhanced"],
function ($) {
return {
run: function (conf, doc, cb, msg) {
Expand Down
2 changes: 1 addition & 1 deletion js/core/id-headers.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
// This is currently in core though it comes from a W3C rule. It may move in the future.

define(
["jquery"],
["core/jquery-enhanced"],
function ($) {
return {
run: function (conf, doc, cb, msg) {
Expand Down
2 changes: 1 addition & 1 deletion js/core/inlines.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
// the counter is not used.

define(
["jquery"],
["core/jquery-enhanced"],
function ($) {
return {
run: function (conf, doc, cb, msg) {
Expand Down
172 changes: 172 additions & 0 deletions js/core/jquery-enhanced.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
define(["jquery", "core/utils"], function($, utils) {
// --- JQUERY EXTRAS -----------------------------------------------------------------------
// Applies to any jQuery object containing elements, changes their name to the one give, and
// return a jQuery object containing the new elements
$.fn.renameElement = function(name) {
var arr = [];
this.each(function() {
var $newEl = $(this.ownerDocument.createElement(name));
// I forget why this didn't work, maybe try again
// $newEl.attr($(this).attr());
for (var i = 0, n = this.attributes.length; i < n; i++) {
var at = this.attributes[i];
$newEl[0].setAttributeNS(at.namespaceURI, at.name, at.value);
}
$(this).contents().appendTo($newEl);
$(this).replaceWith($newEl);
arr.push($newEl[0]);
});
return $(arr);
};

// For any element, returns an array of title strings that applies
// the algorithm used for determining the
// actual title of a <dfn> element (but can apply to other as well).
//
// if args.isDefinition is true, then the element is a definition, not a
// reference to a definition. Any @title or @lt will be replaced with
// @data-lt to be consistent with Bikeshed / Shepherd.
//
// This method now *prefers* the data-lt attribute for the list of
// titles. That attribute is added by this method to dfn elements, so
// subsequent calls to this method will return the data-lt based list.
//
// This method will publish a warning if a title is used on a definition
// instead of an @lt (as per specprod mailing list discussion).
$.fn.getDfnTitles = function(args) {
var titles = [];
var theAttr = "";
var titleString = "";
var normalizedText = "";
//data-lt-noDefault avoid using the text content of a definition
//in the definition list.
if (this.attr("data-lt-noDefault") === undefined) {
normalizedText = utils.norm(this.text()).toLowerCase();
}
// allow @lt to be consistent with bikeshed
if (this.attr("data-lt") || this.attr("lt")) {
theAttr = this.attr("data-lt") ? "data-lt" : "lt";
// prefer @data-lt for the list of title aliases
titleString = this.attr(theAttr).toLowerCase();
if (normalizedText !== "") {
//Regex: starts with the "normalizedText|"
var startsWith = new RegExp("^" + normalizedText + "\\|");
// Use the definition itself as first item, so to avoid
// having to declare the definition twice.
if (!startsWith.test(titleString)) {
titleString = normalizedText + "|" + titleString;
}
}
} else if (this.attr("title")) {
// allow @title for backward compatibility
titleString = this.attr("title");
theAttr = "title";
respecEvents.pub("warn", "Using deprecated attribute @title for '" + this.text() + "': see http://w3.org/respec/guide.html#definitions-and-linking");
} else if (this.contents().length == 1 && this.children("abbr, acronym").length == 1 && this.find(":first-child").attr("title")) {
titleString = this.find(":first-child").attr("title");
} else {
titleString = this.text();
}
// now we have a string of one or more titles
titleString = utils.norm(titleString).toLowerCase();
if (args && args.isDefinition === true) {
// if it came from an attribute, replace that with data-lt as per contract with Shepherd
if (theAttr) {
this.attr("data-lt", titleString);
this.removeAttr(theAttr);
}
// if there is no pre-defined type, assume it is a 'dfn'
if (!this.attr("dfn-type")) {
this.attr("data-dfn-type", "dfn");
} else {
this.attr("data-dfn-type", this.attr("dfn-type"));
this.removeAttr("dfn-type");
}
}
titleString.split('|').forEach(function(item) {
if (item != "") {
titles.push(item);
}
});
return titles;
};

// For any element (usually <a>), returns an array of targets that
// element might refer to, of the form
// {for_: 'interfacename', title: 'membername'}.
//
// For an element like:
// <p link-for="Int1"><a for="Int2">Int3.member</a></p>
// we'll return:
// * {for_: "int2", title: "int3.member"}
// * {for_: "int3", title: "member"}
// * {for_: "", title: "int3.member"}
$.fn.linkTargets = function() {
var elem = this;
var link_for = (elem.attr("for") || elem.attr("data-for") || elem.closest("[link-for]").attr("link-for") || elem.closest("[data-link-for]").attr("data-link-for") || "").toLowerCase();
var titles = elem.getDfnTitles();
var result = [];
$.each(titles, function() {
result.push({
for_: link_for,
title: this
});
var split = this.split('.');
if (split.length === 2) {
// If there are multiple '.'s, this won't match an
// Interface/member pair anyway.
result.push({
for_: split[0],
title: split[1]
});
}
result.push({
for_: "",
title: this
});
});
return result;
};


// Applied to an element, sets an ID for it (and returns it), using a specific prefix
// if provided, and a specific text if given.
$.fn.makeID = function(pfx, txt, noLC) {
if (this.attr("id")) return this.attr("id");
if (!txt) txt = this.attr("title") ? this.attr("title") : this.text();
txt = txt.replace(/^\s+/, "").replace(/\s+$/, "");
var id = noLC ? txt : txt.toLowerCase();
id = id.split(/[^\-.0-9a-z_]+/i).join("-").replace(/^-+/, "").replace(/-+$/, "");
if (/\.$/.test(id)) id += "x"; // trailing . doesn't play well with jQuery
if (id.length > 0 && /^[^a-z]/i.test(id)) id = "x" + id;
if (id.length === 0) id = "generatedID";
if (pfx) id = pfx + "-" + id;
var inc = 1,
doc = this[0].ownerDocument;
if ($("#" + id, doc).length) {
while ($("#" + id + "-" + inc, doc).length) inc++;
id += "-" + inc;
}
this.attr("id", id);
return id;
};

// Returns all the descendant text nodes of an element. Note that those nodes aren't
// returned as a jQuery array since I'm not sure if that would make too much sense.
$.fn.allTextNodes = function(exclusions) {
var textNodes = [],
excl = {};
for (var i = 0, n = exclusions.length; i < n; i++) excl[exclusions[i]] = true;

function getTextNodes(node) {
if (node.nodeType === 1 && excl[node.localName.toLowerCase()]) return;
if (node.nodeType === 3) textNodes.push(node);
else {
for (var i = 0, len = node.childNodes.length; i < len; ++i) getTextNodes(node.childNodes[i]);
}
}
getTextNodes(this[0]);
return textNodes;
};
return $;
});
2 changes: 1 addition & 1 deletion js/core/link-to-dfn.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// Module core/link-to-dfn
// Gives definitions in conf.definitionMap IDs and links <a> tags to the matching definitions.
define(
["jquery"],
["core/jquery-enhanced"],
function ($) {
return {
run: function (conf, doc, cb, msg) {
Expand Down
2 changes: 1 addition & 1 deletion js/core/rdfa.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// particular

define(
["jquery"],
["core/jquery-enhanced"],
function ($) {
return {
run: function (conf, doc, cb, msg) {
Expand Down
2 changes: 1 addition & 1 deletion js/core/structure.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
// - maxTocLevel: only generate a TOC so many levels deep

define(
["jquery"],
["core/jquery-enhanced"],
function ($) {
var secMap = {}
, appendixMode = false
Expand Down

0 comments on commit 63e3a61

Please sign in to comment.