Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
s.forEach(ctx._eventsCache, function (events, index) {
var target = ctx._eventTargets[index];
utils.forEach(events, function (listeners, type) {
utils.forEach(listeners, function (listener) {
target.removeEventListener(type, listener, false);
}, true);
}, false);
}, true);
ctx._eventTargets = [];
ctx._eventsCache = [];
return ctx;
}
function checkPlaceholder(ctx) {
ctx.config.editor.classList[ctx.isEmpty() ? 'add' : 'remove'](ctx.config.placeholderClass);
}
function trim(str) {
return (str || '').trim().replace(/\u200b/g, '');
}
// node.contains is not implemented in IE10/IE11
function containsNode(parent, child) {
if (parent === child) return true;
child = child.parentNode;
while (child) {
if (child === parent) return true;
child = child.parentNode;
}
return false;
}
function getNode(ctx, byRoot) {
var node,
root = ctx.config.editor;
ctx._range = ctx._range || ctx.getRange();
node = ctx._range.commonAncestorContainer;
// Fix selection detection for Firefox
if (node.hasChildNodes() && ctx._range.startOffset + 1 === ctx._range.endOffset) {
node = node.childNodes[ctx._range.startOffset];
}
if (!node || node === root) return null;
while (node && (node.nodeType !== 1) && (node.parentNode !== root)) node = node.parentNode;
while (node && byRoot && (node.parentNode !== root)) node = node.parentNode;
return containsNode(root, node) ? node : null;
}
function getEffectNodes(ctx) {
return getNodeParents(ctx).filter(function(node) {
return node.nodeName.match(effectNodeReg);
});
}
function getNodeParents(ctx) {
var nodes = [],
el = getNode(ctx);
while (el && el !== ctx.config.editor) {
if (el.nodeType === Node.ELEMENT_NODE) {
nodes.push(el);
}
el = el.parentNode;
}
return nodes;
}
function handleEmptyContent(ctx) {
var range = ctx._range = ctx.getRange();
ctx.config.editor.innerHTML = '';
var p = doc.createElement('p');
p.innerHTML = '
';
range.insertNode(p);
focusNode(ctx, p.childNodes[0], range);
}
function addEmptyCharAtEnd(ctx) {
var range = ctx.getRange(),
emptyCharNode = doc.createTextNode('\u200b');
range.selectNodeContents(ctx.config.editor);
range.collapse(false);
range.insertNode(emptyCharNode);
focusNode(ctx, emptyCharNode, range);
}
function isCaretAtEnd(ctx) {
var range = ctx.getRange(),
clonedRange = range.cloneRange();
clonedRange.selectNodeContents(ctx.config.editor);
clonedRange.setStart(range.endContainer, range.endOffset);
return clonedRange.toString() === '';
}
function isCaretAtStart(ctx) {
var range = ctx.getRange(),
clonedRange = range.cloneRange();
clonedRange.selectNodeContents(ctx.config.editor);
clonedRange.setEnd(range.startContainer, range.startOffset);
return clonedRange.toString() === '';
}
function focusNode(ctx, node, range) {
range.setStartAfter(node);
range.setEndBefore(node);
range.collapse(false);
ctx.setRange(range);
}
function autoLink(node) {
if (node.nodeType === 1) {
if (autoLinkReg.notLink.test(node.tagName)) return;
utils.forEach(node.childNodes, function (child) {
autoLink(child);
}, true);
} else if (node.nodeType === 3) {
var result = urlToLink(node.nodeValue || '');
if (!result.links) return;
var frag = doc.createDocumentFragment(),
div = doc.createElement('div');
div.inne
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Scelerisque purus semper eget duis. Quis blandit turpis cursus in hac habitasse platea. Pellentesque eu tincidunt tortor aliquam nulla facilisi. Sed…

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Scelerisque purus semper eget duis. Quis blandit turpis cursus in hac habitasse platea. Pellentesque eu tincidunt tortor aliquam nulla facilisi. Sed…

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Scelerisque purus semper eget duis. Quis blandit turpis cursus in hac habitasse platea. Pellentesque eu tincidunt tortor aliquam nulla facilisi. Sed…

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Scelerisque purus semper eget duis. Quis blandit turpis cursus in hac habitasse platea. Pellentesque eu tincidunt tortor aliquam nulla facilisi. Sed…

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Scelerisque purus semper eget duis. Quis blandit turpis cursus in hac habitasse platea. Pellentesque eu tincidunt tortor aliquam nulla facilisi. Sed…

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Scelerisque purus semper eget duis. Quis blandit turpis cursus in hac habitasse platea. Pellentesque eu tincidunt tortor aliquam nulla facilisi. Sed…