New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

get-selection-more

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

get-selection-more - npm Package Compare versions

Comparing version 0.0.1 to 1.0.0

2

dist/get-selection-more.es.js

@@ -1,2 +0,2 @@

function e(e=window){const t=(e.getSelection()||"").toString().trim();if(t)return t;const n=e.document.activeElement;if(n&&("INPUT"===n.tagName||"TEXTAREA"===n.tagName)){const e=n;return e.value.slice(e.selectionStart||0,e.selectionEnd||0)}return""}function t(e=window){const t=e.getSelection();if(!t)return"";const s=t.toString();return s.trim()?(function(e,t){if(!e||e.nodeType!==Node.TEXT_NODE)return"";let s=e.textContent||"";s&&(s=s.slice(0,t));for(let t=e.previousSibling;t;t=t.previousSibling)s=n(t)+s;for(let t=e.parentElement;t&&t!==document.body&&c(t);t=t.parentElement)for(let e=t.previousSibling;e;e=e.previousSibling)s=n(e)+s;const o=/[.?!。?!…]/,i=/[^\s.?!。?!…]/;for(let e=s.length-1;e>=0;e--){const t=s[e];if(o.test(t)){if("."===t&&i.test(s[e+1]))continue;return s.slice(e+1)}}return s}(t.anchorNode,t.anchorOffset)+s+function(e,t){if(!e||e.nodeType!==Node.TEXT_NODE)return"";let s=e.textContent||"";s&&(s=s.slice(t));for(let t=e.nextSibling;t;t=t.nextSibling)s+=n(t);for(let t=e.parentElement;t&&t!==document.body&&c(t);t=t.parentElement)for(let e=t.nextSibling;e;e=e.nextSibling)s+=n(e);return(s.match(/^((\.(?![\s.?!。?!…]))|[^.?!。?!…])*([.?!。?!…]){0,3}/)||[""])[0]}(t.focusNode,t.focusOffset)).replace(/\s+/g," ").trim():""}function n(e){return e.nodeType===Node.TEXT_NODE?e.textContent||"":e.nodeType===Node.ELEMENT_NODE?e.innerText:""}function c(e){switch(e.tagName){case"A":case"ABBR":case"B":case"BDI":case"BDO":case"BR":case"CITE":case"CODE":case"DATA":case"DFN":case"EM":case"I":case"KBD":case"MARK":case"Q":case"RP":case"RT":case"RTC":case"RUBY":case"S":case"SAMP":case"SMALL":case"SPAN":case"STRONG":case"SUB":case"SUP":case"TIME":case"U":case"VAR":case"WBR":return!0;default:return!1}}export{t as getSentence,e as getText};
function e(e=window){const t=(e.getSelection()||"").toString().trim();if(t)return t;const n=e.document.activeElement;if(n&&("INPUT"===n.tagName||"TEXTAREA"===n.tagName)){const e=n;return e.value.slice(e.selectionStart||0,e.selectionEnd||0)}return""}function t(e=window){const t=e.getSelection();if(!t||t.rangeCount<=0)return"";const n=t.toString();if(!n.trim())return"";const r=t.getRangeAt(0);return r?(c(r)+n+s(r)).replace(/\s+/g," ").trim():""}function n(e=window){const t=e.getSelection();if(!t||t.rangeCount<=0)return"";const n=t.toString();if(!n.trim())return"";const r=t.getRangeAt(0);return r?(function(e){if(e){const t=/[.?!。?!…]/,n=/[^\s.?!。?!…]/;for(let c=e.length-1;c>=0;c--){const s=e[c];if(t.test(s)){if("."===s&&n.test(e[c+1]))continue;return e.slice(c+1)}}}return e}(c(r))+n+function(e){const t=/^((\.(?![\s.?!。?!…]))|[^.?!。?!…])*([.?!。?!…]){0,3}/.exec(e);return t?t[0]:""}(s(r))).replace(/\s+/g," ").trim():""}function c(e){if(!e.startContainer)return"";let t=e.startContainer,n="";switch(t.nodeType){case Node.TEXT_NODE:{const c=t.textContent;c&&(n=c.slice(0,e.startOffset));break}case Node.COMMENT_NODE:case Node.CDATA_SECTION_NODE:break;default:t=t.childNodes[e.startOffset]}for(let e=t;a(e);e=e.parentElement)for(let t=e.previousSibling;a(t);t=t.previousSibling)n=r(t)+n;return n}function s(e){if(!e.endContainer)return"";let t=e.endContainer,n="";switch(t.nodeType){case Node.TEXT_NODE:{const c=t.textContent;c&&(n=c.slice(e.endOffset));break}case Node.COMMENT_NODE:case Node.CDATA_SECTION_NODE:break;default:t=t.childNodes[e.endOffset-1]}for(let e=t;a(e);e=e.parentElement)for(let t=e.nextSibling;a(t);t=t.nextSibling)n+=r(t);return n}function r(e){return e.nodeType===Node.TEXT_NODE?e.textContent||"":e.nodeType===Node.ELEMENT_NODE?e.innerText:""}function a(e){if(!e)return!1;switch(e.nodeType){case Node.TEXT_NODE:case Node.COMMENT_NODE:case Node.CDATA_SECTION_NODE:return!0;case Node.ELEMENT_NODE:switch(e.tagName){case"A":case"ABBR":case"B":case"BDI":case"BDO":case"BR":case"CITE":case"CODE":case"DATA":case"DFN":case"EM":case"I":case"KBD":case"MARK":case"Q":case"RP":case"RT":case"RTC":case"RUBY":case"S":case"SAMP":case"SMALL":case"SPAN":case"STRONG":case"SUB":case"SUP":case"TIME":case"U":case"VAR":case"WBR":return!0;default:return!1}default:return!1}}export{t as getParagraph,n as getSentence,e as getText};
//# sourceMappingURL=get-selection-more.es.js.map

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).getSelectionMore={})}(this,function(e){"use strict";function t(e){return e.nodeType===Node.TEXT_NODE?e.textContent||"":e.nodeType===Node.ELEMENT_NODE?e.innerText:""}function n(e){switch(e.tagName){case"A":case"ABBR":case"B":case"BDI":case"BDO":case"BR":case"CITE":case"CODE":case"DATA":case"DFN":case"EM":case"I":case"KBD":case"MARK":case"Q":case"RP":case"RT":case"RTC":case"RUBY":case"S":case"SAMP":case"SMALL":case"SPAN":case"STRONG":case"SUB":case"SUP":case"TIME":case"U":case"VAR":case"WBR":return!0;default:return!1}}e.getSentence=function(e){void 0===e&&(e=window);var r=e.getSelection();if(!r)return"";var a=r.toString();return a.trim()?(function(e,r){if(!e||e.nodeType!==Node.TEXT_NODE)return"";var a=e.textContent||"";a&&(a=a.slice(0,r));for(var i=e.previousSibling;i;i=i.previousSibling)a=t(i)+a;for(var o=e.parentElement;o&&o!==document.body&&n(o);o=o.parentElement)for(var i=o.previousSibling;i;i=i.previousSibling)a=t(i)+a;for(var c=/[.?!。?!…]/,s=/[^\s.?!。?!…]/,f=a.length-1;f>=0;f--){var u=a[f];if(c.test(u)){if("."===u&&s.test(a[f+1]))continue;return a.slice(f+1)}}return a}(r.anchorNode,r.anchorOffset)+a+function(e,r){if(!e||e.nodeType!==Node.TEXT_NODE)return"";var a=e.textContent||"";a&&(a=a.slice(r));for(var i=e.nextSibling;i;i=i.nextSibling)a+=t(i);for(var o=e.parentElement;o&&o!==document.body&&n(o);o=o.parentElement)for(var i=o.nextSibling;i;i=i.nextSibling)a+=t(i);return(a.match(/^((\.(?![\s.?!。?!…]))|[^.?!。?!…])*([.?!。?!…]){0,3}/)||[""])[0]}(r.focusNode,r.focusOffset)).replace(/\s+/g," ").trim():""},e.getText=function(e){void 0===e&&(e=window);var t=(e.getSelection()||"").toString().trim();if(t)return t;var n=e.document.activeElement;if(n&&("INPUT"===n.tagName||"TEXTAREA"===n.tagName)){var r=n;return r.value.slice(r.selectionStart||0,r.selectionEnd||0)}return""},Object.defineProperty(e,"__esModule",{value:!0})});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).getSelectionMore={})}(this,function(e){"use strict";function t(e){if(!e.startContainer)return"";var t=e.startContainer,n="";switch(t.nodeType){case Node.TEXT_NODE:var c=t.textContent;c&&(n=c.slice(0,e.startOffset));break;case Node.COMMENT_NODE:case Node.CDATA_SECTION_NODE:break;default:t=t.childNodes[e.startOffset]}for(var i=t;a(i);i=i.parentElement)for(var s=i.previousSibling;a(s);s=s.previousSibling)n=r(s)+n;return n}function n(e){if(!e.endContainer)return"";var t=e.endContainer,n="";switch(t.nodeType){case Node.TEXT_NODE:var c=t.textContent;c&&(n=c.slice(e.endOffset));break;case Node.COMMENT_NODE:case Node.CDATA_SECTION_NODE:break;default:t=t.childNodes[e.endOffset-1]}for(var i=t;a(i);i=i.parentElement)for(var s=i.nextSibling;a(s);s=s.nextSibling)n+=r(s);return n}function r(e){return e.nodeType===Node.TEXT_NODE?e.textContent||"":e.nodeType===Node.ELEMENT_NODE?e.innerText:""}function a(e){if(!e)return!1;switch(e.nodeType){case Node.TEXT_NODE:case Node.COMMENT_NODE:case Node.CDATA_SECTION_NODE:return!0;case Node.ELEMENT_NODE:switch(e.tagName){case"A":case"ABBR":case"B":case"BDI":case"BDO":case"BR":case"CITE":case"CODE":case"DATA":case"DFN":case"EM":case"I":case"KBD":case"MARK":case"Q":case"RP":case"RT":case"RTC":case"RUBY":case"S":case"SAMP":case"SMALL":case"SPAN":case"STRONG":case"SUB":case"SUP":case"TIME":case"U":case"VAR":case"WBR":return!0;default:return!1}default:return!1}}e.getParagraph=function(e){void 0===e&&(e=window);var r=e.getSelection();if(!r||r.rangeCount<=0)return"";var a=r.toString();if(!a.trim())return"";var c=r.getRangeAt(0);return c?(t(c)+a+n(c)).replace(/\s+/g," ").trim():""},e.getSentence=function(e){void 0===e&&(e=window);var r=e.getSelection();if(!r||r.rangeCount<=0)return"";var a=r.toString();if(!a.trim())return"";var c,i,s=r.getRangeAt(0);return s?(function(e){if(e)for(var t=/[.?!。?!…]/,n=/[^\s.?!。?!…]/,r=e.length-1;r>=0;r--){var a=e[r];if(t.test(a)){if("."===a&&n.test(e[r+1]))continue;return e.slice(r+1)}}return e}(t(s))+a+(c=n(s),i=/^((\.(?![\s.?!。?!…]))|[^.?!。?!…])*([.?!。?!…]){0,3}/.exec(c),i?i[0]:"")).replace(/\s+/g," ").trim():""},e.getText=function(e){void 0===e&&(e=window);var t=(e.getSelection()||"").toString().trim();if(t)return t;var n=e.document.activeElement;if(n&&("INPUT"===n.tagName||"TEXTAREA"===n.tagName)){var r=n;return r.value.slice(r.selectionStart||0,r.selectionEnd||0)}return""},Object.defineProperty(e,"__esModule",{value:!0})});
//# sourceMappingURL=get-selection-more.umd.js.map

@@ -5,2 +5,5 @@ /**

export function getText(win = window) {
// When called on an <iframe> that is not displayed (eg. where display: none is set)
// Firefox will return null, whereas other browsers will return a Selection object
// with Selection.type set to None.
const selection = (win.getSelection() || '').toString().trim();

@@ -10,3 +13,4 @@ if (selection) {

}
// Firefox fix
// Currently getSelection() doesn't work on the content of <input> elements in Firefox
// Document.activeElement returns the focused element.
const activeElement = win.document.activeElement;

@@ -22,2 +26,22 @@ if (activeElement) {

/**
* Returns the paragraph containing the selection text.
*/
export function getParagraph(win = window) {
const selection = win.getSelection();
if (!selection || selection.rangeCount <= 0) {
return '';
}
const selectedText = selection.toString();
if (!selectedText.trim()) {
return '';
}
const range = selection.getRangeAt(0);
if (!range) {
return '';
}
return (extractParagraphHead(range) + selectedText + extractParagraphTail(range))
.replace(/\s+/g, ' ')
.trim();
}
/**
* Returns the sentence containing the selection text.

@@ -27,3 +51,3 @@ */

const selection = win.getSelection();
if (!selection) {
if (!selection || selection.rangeCount <= 0) {
return '';

@@ -35,62 +59,91 @@ }

}
return (extractSentenceHead(selection.anchorNode, selection.anchorOffset) +
const range = selection.getRangeAt(0);
if (!range) {
return '';
}
return (extractSentenceHead(extractParagraphHead(range)) +
selectedText +
extractSentenceTail(selection.focusNode, selection.focusOffset))
extractSentenceTail(extractParagraphTail(range)))
.replace(/\s+/g, ' ')
.trim();
}
function extractSentenceHead(anchorNode, anchorOffset) {
if (!anchorNode || anchorNode.nodeType !== Node.TEXT_NODE) {
function extractParagraphHead(range) {
if (!range.startContainer) {
return '';
}
let leadingText = anchorNode.textContent || '';
if (leadingText) {
leadingText = leadingText.slice(0, anchorOffset);
let startNode = range.startContainer;
let leadingText = '';
switch (startNode.nodeType) {
case Node.TEXT_NODE: {
const textContent = startNode.textContent;
if (textContent) {
leadingText = textContent.slice(0, range.startOffset);
}
break;
}
case Node.COMMENT_NODE:
case Node.CDATA_SECTION_NODE:
break;
default:
startNode = startNode.childNodes[range.startOffset];
}
// prev siblings
for (let node = anchorNode.previousSibling; node; node = node.previousSibling) {
leadingText = getTextFromNode(node) + leadingText;
}
// parent prev siblings
for (let element = anchorNode.parentElement; element && element !== document.body && isInlineTag(element); element = element.parentElement) {
for (let node = element.previousSibling; node; node = node.previousSibling) {
leadingText = getTextFromNode(node) + leadingText;
for (let node = startNode; isInlineNode(node); node = node.parentElement) {
for (let sibl = node.previousSibling; isInlineNode(sibl); sibl = sibl.previousSibling) {
leadingText = getTextFromNode(sibl) + leadingText;
}
}
const puncTester = /[.?!。?!…]/;
/** meaningful char after dot "." */
const charTester = /[^\s.?!。?!…]/;
for (let i = leadingText.length - 1; i >= 0; i--) {
const c = leadingText[i];
if (puncTester.test(c)) {
if (c === '.' && charTester.test(leadingText[i + 1])) {
// a.b is allowed
continue;
}
return leadingText.slice(i + 1);
}
}
return leadingText;
}
function extractSentenceTail(focusNode, focusOffset) {
if (!focusNode || focusNode.nodeType !== Node.TEXT_NODE) {
function extractParagraphTail(range) {
if (!range.endContainer) {
return '';
}
let tailingText = focusNode.textContent || '';
if (tailingText) {
tailingText = tailingText.slice(focusOffset);
let endNode = range.endContainer;
let tailingText = '';
switch (endNode.nodeType) {
case Node.TEXT_NODE: {
const textContent = endNode.textContent;
if (textContent) {
tailingText = textContent.slice(range.endOffset);
}
break;
}
case Node.COMMENT_NODE:
case Node.CDATA_SECTION_NODE:
break;
default:
endNode = endNode.childNodes[range.endOffset - 1];
}
// next siblings
for (let node = focusNode.nextSibling; node; node = node.nextSibling) {
tailingText += getTextFromNode(node);
}
// parent next siblings
for (let element = focusNode.parentElement; element && element !== document.body && isInlineTag(element); element = element.parentElement) {
for (let node = element.nextSibling; node; node = node.nextSibling) {
tailingText += getTextFromNode(node);
for (let node = endNode; isInlineNode(node); node = node.parentElement) {
for (let sibl = node.nextSibling; isInlineNode(sibl); sibl = sibl.nextSibling) {
tailingText += getTextFromNode(sibl);
}
}
return tailingText;
}
function extractSentenceHead(leadingText) {
// split regexp to prevent backtracking
if (leadingText) {
const puncTester = /[.?!。?!…]/;
/** meaningful char after dot "." */
const charTester = /[^\s.?!。?!…]/;
for (let i = leadingText.length - 1; i >= 0; i--) {
const c = leadingText[i];
if (puncTester.test(c)) {
if (c === '.' && charTester.test(leadingText[i + 1])) {
// a.b is allowed
continue;
}
return leadingText.slice(i + 1);
}
}
}
return leadingText;
}
function extractSentenceTail(tailingText) {
// match tail for "..."
const sentenceTailTester = /^((\.(?![\s.?!。?!…]))|[^.?!。?!…])*([.?!。?!…]){0,3}/;
return (tailingText.match(sentenceTailTester) || [''])[0];
const tailMatch = /^((\.(?![\s.?!。?!…]))|[^.?!。?!…])*([.?!。?!…]){0,3}/.exec(tailingText);
return tailMatch ? tailMatch[0] : '';
}

@@ -106,35 +159,48 @@ function getTextFromNode(node) {

}
function isInlineTag(el) {
switch (el.tagName) {
case 'A':
case 'ABBR':
case 'B':
case 'BDI':
case 'BDO':
case 'BR':
case 'CITE':
case 'CODE':
case 'DATA':
case 'DFN':
case 'EM':
case 'I':
case 'KBD':
case 'MARK':
case 'Q':
case 'RP':
case 'RT':
case 'RTC':
case 'RUBY':
case 'S':
case 'SAMP':
case 'SMALL':
case 'SPAN':
case 'STRONG':
case 'SUB':
case 'SUP':
case 'TIME':
case 'U':
case 'VAR':
case 'WBR':
function isInlineNode(node) {
if (!node) {
return false;
}
switch (node.nodeType) {
case Node.TEXT_NODE:
case Node.COMMENT_NODE:
case Node.CDATA_SECTION_NODE:
return true;
case Node.ELEMENT_NODE: {
switch (node.tagName) {
case 'A':
case 'ABBR':
case 'B':
case 'BDI':
case 'BDO':
case 'BR':
case 'CITE':
case 'CODE':
case 'DATA':
case 'DFN':
case 'EM':
case 'I':
case 'KBD':
case 'MARK':
case 'Q':
case 'RP':
case 'RT':
case 'RTC':
case 'RUBY':
case 'S':
case 'SAMP':
case 'SMALL':
case 'SPAN':
case 'STRONG':
case 'SUB':
case 'SUP':
case 'TIME':
case 'U':
case 'VAR':
case 'WBR':
return true;
default:
return false;
}
}
default:

@@ -141,0 +207,0 @@ return false;

@@ -6,4 +6,8 @@ /**

/**
* Returns the paragraph containing the selection text.
*/
export declare function getParagraph(win?: Window): string;
/**
* Returns the sentence containing the selection text.
*/
export declare function getSentence(win?: Window): string;
{
"name": "get-selection-more",
"version": "0.0.1",
"version": "1.0.0",
"description": "Get text and context sentence from window.getSelection()",

@@ -14,4 +14,5 @@ "keywords": [

"prebuild": "rimraf dist",
"build": "tsc && rollup -c rollup.config.ts",
"start": "rollup -c rollup.config.ts -w"
"build": "tsc && rollup -c rollup.config.js",
"start": "rollup -c rollup.config.js -w",
"test": "karma start"
},

@@ -31,3 +32,19 @@ "main": "dist/get-selection-more.umd.js",

"devDependencies": {
"@types/chai": "^4.1.7",
"@types/mocha": "^5.2.7",
"@types/webpack-env": "^1.13.9",
"chai": "^4.2.0",
"istanbul-instrumenter-loader": "^3.0.1",
"karma": "^4.1.0",
"karma-chai": "^0.1.0",
"karma-chrome-launcher": "^2.2.0",
"karma-coverage-istanbul-reporter": "^2.0.5",
"karma-coveralls": "^2.1.0",
"karma-firefox-launcher": "^1.1.0",
"karma-mocha": "^1.3.0",
"karma-nyan-reporter": "^0.2.5",
"karma-rollup-preprocessor": "^7.0.0",
"karma-webpack": "^4.0.2",
"lodash.camelcase": "^4.3.0",
"mocha": "^6.1.4",
"rimraf": "^2.6.3",

@@ -38,7 +55,10 @@ "rollup": "^1.15.2",

"rollup-plugin-typescript2": "^0.21.1",
"ts-loader": "^6.0.2",
"tslint": "^5.17.0",
"tslint-config-prettier": "^1.18.0",
"tslint-config-standard": "^8.0.1",
"typescript": "^3.5.1"
"tsx-dom": "^0.8.3",
"typescript": "^3.5.1",
"webpack": "^4.34.0"
}
}

@@ -1,4 +0,4 @@

# Get Selection More [![npm-version](https://img.shields.io/npm/v/get-selection-more.svg)](https://www.npmjs.com/package/get-selection-more)
# Get Selection More [![npm-version](https://img.shields.io/npm/v/get-selection-more.svg)](https://www.npmjs.com/package/get-selection-more) [![Build Status](https://travis-ci.org/crimx/get-selection-more.svg?branch=master)](https://travis-ci.org/crimx/get-selection-more) [![Coverage Status](https://coveralls.io/repos/github/crimx/get-selection-more/badge.svg?branch=master)](https://coveralls.io/github/crimx/get-selection-more?branch=master)
Exports two functions to get selection text and context sentence.
## APIs

@@ -10,4 +10,7 @@ ```typescript

export declare function getText(win?: Window): string;
/**
* Returns the paragraph containing the selection text.
*/
export declare function getParagraph(win?: Window): string;
/**
* Returns the sentence containing the selection text.

@@ -17,1 +20,13 @@ */

```
## Usage
```javascript
import { getText, getParagraph, getSentence } from 'get-selection-more'
document.addEventListener('selectionchange', () => {
console.log(getText(), getParagraph(), getSentence())
})
```
Or load the UMD module directly which exposes `getSelectionMore` global.

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc