ngx-truncate-text
Version:
This module is for shortening the text and also includes some useful features for text manipulation like finding hashtags, highlight words with favorite color and so on after version 1.0.0.
146 lines • 15 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/ngx-truncate.service.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable } from "@angular/core";
export class NgxTruncateService {
constructor() { }
/**
* check the word cut
* @param {?} number
* @param {?} text
* @return {?}
*/
checkWordCut(number, text) {
/** @type {?} */
let i = 0;
for (i = number; i < text.length; i++) {
if (text[i] == ' ')
break;
}
return text.substring(0, i);
}
/**
* find hashtag from text
* @param {?} text
* @return {?}
*/
findHashtag(text) {
/** @type {?} */
const pattern = `^|[\s](#[\p{Pc}\p{N}\p{L}\u200cÀ-ÖØ-öø-ʸ(_)]+)`;
//text = text.replace(new RegExp(pattern, 'ugmi'), match => {
text = text.replace(/(^|\s)(#[\p{Pc}\p{N}\p{L}\u200cÀ-ÖØ-öø-ʸ(_)]+)/ugmi, (/**
* @param {?} match
* @return {?}
*/
(match) => {
return `<span class="hashtag" style="color:#1b95e0">${match}</span>`;
}));
return text;
}
/**
* check conditions and return text with them
* @param {?} text
* @param {?} number
* @param {?=} completeWord
* @param {?=} hashtag
* @return {?}
*/
applyCondition(text, number, completeWord = false, hashtag = false) {
/** @type {?} */
let manipulatedText = "";
if (completeWord && hashtag) {
/** @type {?} */
const temp = this.checkWordCut(number, text);
manipulatedText = this.findHashtag(temp);
}
else if (completeWord) {
manipulatedText = this.checkWordCut(number, text);
}
else if (hashtag) {
/** @type {?} */
const temp = text.substring(0, number);
manipulatedText = this.findHashtag(temp);
}
else {
manipulatedText = text.substring(0, number);
}
return manipulatedText;
}
/**
* رنگ کردن کلمات داده شده در متن
* @param {?} content
* @param {?} highlightCondition
* @param {?} highlightQuery
* @return {?}
*/
highlight(content, highlightCondition, highlightQuery) {
//روی دایرکتیو تعریف نشود خود متن را بر می کرداند highlightList اگر ورودی
if (!highlightQuery.length) {
return content;
}
// دقیقا یافت می شود highlightList روی دایرکتیو تعریف نشود کلمات داده شده در highlightCondition اگر ورودی
if (highlightCondition == "exactly") {
for (let q of highlightQuery) {
/** @type {?} */
let pattern = '';
//به صورت آبجکت باشند highlightList اگر کلمات داده شده در
if (q.hasOwnProperty('name')) {
pattern = "(^|(?<!\\p{L}))(" + q.name + ")(?!(\\p{L}))";
content = content.replace(new RegExp(pattern, 'gmu'), (/**
* @param {?} match
* @return {?}
*/
match => {
return `<span style="background:${q.color}">${match}</span>`;
}));
}
//به صورت رشته باشند highlightList اگر کلمات داده شده در
else {
pattern = "(^|(?<!\\p{L}))(" + q + ")(?!(\\p{L}))";
content = content.replace(new RegExp(pattern, 'gmu'), (/**
* @param {?} match
* @return {?}
*/
match => {
return `<span style="background:yellow">${match}</span>`;
}));
}
}
return content;
}
//هر مشابهی از کلمات در متن پیدا شده و رنگ می شوند
else {
for (let q of highlightQuery) {
/** @type {?} */
let pattern = '';
//به صورت آبجکت باشند highlightList اگر کلمات داده شده در
if (q.hasOwnProperty('name')) {
/** @type {?} */
let words = content.match(new RegExp(q.name, "gmi"));
if (words)
for (const word of words) {
content = content.replace(new RegExp(q.name, "gmi"), `<span style="background-color:${q.color}">${word}</span>`);
}
}
//به صورت رشته باشند highlightList اگر کلمات داده شده در
else {
/** @type {?} */
let words = content.match(new RegExp(q, "gmi"));
if (words)
for (const word of words) {
content = content.replace(new RegExp(q, "gmi"), `<span style="background-color:yellow">${word}</span>`);
}
}
}
return content;
}
}
}
NgxTruncateService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
NgxTruncateService.ctorParameters = () => [];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRydW5jYXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdHJ1bmNhdGUtdGV4dC8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtdHJ1bmNhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixnQkFBZ0IsQ0FBQzs7Ozs7OztJQUdqQixZQUFZLENBQUMsTUFBYyxFQUFFLElBQVk7O1lBQ25DLENBQUMsR0FBRyxDQUFDO1FBQ1QsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUc7Z0JBQUUsTUFBTTtTQUMzQjtRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQzs7Ozs7O0lBR0QsV0FBVyxDQUFDLElBQUk7O2NBQ1IsT0FBTyxHQUFHLGdEQUFnRDtRQUNoRSw2REFBNkQ7UUFDN0QsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsb0RBQW9EOzs7O1FBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsRixPQUFPLCtDQUErQyxLQUFLLFNBQVMsQ0FBQztRQUN2RSxDQUFDLEVBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7Ozs7Ozs7O0lBR0QsY0FBYyxDQUFDLElBQVksRUFBRSxNQUFjLEVBQUUsZUFBd0IsS0FBSyxFQUFFLFVBQW1CLEtBQUs7O1lBQzlGLGVBQWUsR0FBVyxFQUFFO1FBQ2hDLElBQUksWUFBWSxJQUFJLE9BQU8sRUFBRTs7a0JBQ3JCLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDNUMsZUFB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QUMsRUFBRSx5Q0FBeUMsSUFBSSxTQUFTLENBQUMsQ0FBQzt5QkFDekc7aUJBQ0o7YUFDRjtZQUNELE9BQU8sT0FBTyxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQzs7O1lBakdGLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5neFRydW5jYXRlU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIC8qKiBjaGVjayB0aGUgd29yZCBjdXQgKi9cclxuICBjaGVja1dvcmRDdXQobnVtYmVyOiBudW1iZXIsIHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgaSA9IDBcclxuICAgIGZvciAoaSA9IG51bWJlcjsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRleHRbaV0gPT0gJyAnKSBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZygwLCBpKTtcclxuICB9XHJcblxyXG4gIC8qKiBmaW5kIGhhc2h0YWcgZnJvbSB0ZXh0ICovXHJcbiAgZmluZEhhc2h0YWcodGV4dCkge1xyXG4gICAgY29uc3QgcGF0dGVybiA9IGBefFtcXHNdKCNbXFxwe1BjfVxccHtOfVxccHtMfVxcdTIwMGPDgC3DlsOYLcO2w7gtyrgoXyldKylgO1xyXG4gICAgLy90ZXh0ID0gdGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAocGF0dGVybiwgJ3VnbWknKSwgbWF0Y2ggPT4ge1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvKF58XFxzKSgjW1xccHtQY31cXHB7Tn1cXHB7TH1cXHUyMDBjw4Atw5bDmC3DtsO4Lcq4KF8pXSspL3VnbWksIChtYXRjaCkgPT4ge1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiaGFzaHRhZ1wiIHN0eWxlPVwiY29sb3I6IzFiOTVlMFwiPiR7bWF0Y2h9PC9zcGFuPmA7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0ZXh0O1xyXG4gIH1cclxuXHJcbiAgLyoqIGNoZWNrIGNvbmRpdGlvbnMgYW5kIHJldHVybiB0ZXh0IHdpdGggdGhlbSAqL1xyXG4gIGFwcGx5Q29uZGl0aW9uKHRleHQ6IHN0cmluZywgbnVtYmVyOiBudW1iZXIsIGNvbXBsZXRlV29yZDogYm9vbGVhbiA9IGZhbHNlLCBoYXNodGFnOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1hbmlwdWxhdGVkVGV4dDogc3RyaW5nID0gXCJcIjtcclxuICAgIGlmIChjb21wbGV0ZVdvcmQgJiYgaGFzaHRhZykge1xyXG4gICAgICBjb25zdCB0ZW1wID0gdGhpcy5jaGVja1dvcmRDdXQobnVtYmVyLCB0ZXh0KTtcclxuICAgICAgbWFuaXB1bGF0ZWRUZXh0ID0gdGhpcy5maW5kSGFzaHRhZyh0ZW1wKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbXBsZXRlV29yZCkge1xyXG4gICAgICBtYW5pcHVsYXRlZFRleHQgPSB0aGlzLmNoZWNrV29yZEN1dChudW1iZXIsIHRleHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaGFzaHRhZykge1xyXG4gICAgICBjb25zdCB0ZW1wID0gdGV4dC5zdWJzdHJpbmcoMCwgbnVtYmVyKTtcclxuICAgICAgbWFuaXB1bGF0ZWRUZXh0ID0gdGhpcy5maW5kSGFzaHRhZyh0ZW1wKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBtYW5pcHVsYXRlZFRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBudW1iZXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1hbmlwdWxhdGVkVGV4dDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqINix2YbaryDaqdix2K/ZhiDaqdmE2YXYp9iqINiv2KfYr9mHINi02K/ZhyDYr9ixINmF2KrZhlxyXG4gICAqIEBwYXJhbSBjb250ZW50XHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0KGNvbnRlbnQ6IGFueSwgaGlnaGxpZ2h0Q29uZGl0aW9uOiBzdHJpbmcgLCBoaWdobGlnaHRRdWVyeTogYW55KSB7XHJcbiAgICAvL9ix2YjbjCDYr9in24zYsdqp2KrbjNmIINiq2LnYsduM2YEg2YbYtNmI2K8g2K7ZiNivINmF2KrZhiDYsdinINio2LEg2YXbjCDaqdix2K/Yp9mG2K8gaGlnaGxpZ2h0TGlzdCDYp9qv2LEg2YjYsdmI2K/bjFxyXG4gICAgaWYgKCFoaWdobGlnaHRRdWVyeS5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XHJcbiAgICB9XHJcbiAgICAvLyDYr9mC24zZgtinINuM2KfZgdiqINmF24wg2LTZiNivICBoaWdobGlnaHRMaXN0INix2YjbjCDYr9in24zYsdqp2KrbjNmIINiq2LnYsduM2YEg2YbYtNmI2K8g2qnZhNmF2KfYqiDYr9in2K/ZhyDYtNiv2Ycg2K/YsSBoaWdobGlnaHRDb25kaXRpb24g2Kfar9ixINmI2LHZiNiv24xcclxuICAgIGlmIChoaWdobGlnaHRDb25kaXRpb24gPT0gXCJleGFjdGx5XCIpIHtcclxuICAgICAgZm9yIChsZXQgcSBvZiBoaWdobGlnaHRRdWVyeSkge1xyXG4gICAgICAgIGxldCBwYXR0ZXJuID0gJyc7XHJcbiAgICAgICAgLy/YqNmHINi12YjYsdiqINii2KjYrNqp2Kog2KjYp9i02YbYryBoaWdobGlnaHRMaXN0INin2q/YsSDaqdmE2YXYp9iqINiv2KfYr9mHINi02K/ZhyDYr9ixXHJcbiAgICAgICAgaWYgKHEuaGFzT3duUHJvcGVydHkoJ25hbWUnKSkge1xyXG4gICAgICAgICAgcGF0dGVybiA9IFwiKF58KD88IVxcXFxwe0x9KSkoXCIgKyBxLm5hbWUgKyBcIikoPyEoXFxcXHB7TH0pKVwiO1xyXG4gICAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZShuZXcgUmVnRXhwKHBhdHRlcm4sICdnbXUnKSwgbWF0Y2ggPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYDxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZDoke3EuY29sb3J9XCI+JHttYXRjaH08L3NwYW4+YDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL9io2Ycg2LXZiNix2Kog2LHYtNiq2Ycg2KjYp9i02YbYryBoaWdobGlnaHRMaXN0INin2q/YsSDaqdmE2YXYp9iqINiv2KfYr9mHINi02K/ZhyDYr9ixXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBwYXR0ZXJuID0gXCIoXnwoPzwhXFxcXHB7TH0pKShcIiArIHEgKyBcIikoPyEoXFxcXHB7TH0pKVwiO1xyXG4gICAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZShuZXcgUmVnRXhwKHBhdHRlcm4sICdnbXUnKSwgbWF0Y2ggPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYDxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZDp5ZWxsb3dcIj4ke21hdGNofTwvc3Bhbj5gO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjb250ZW50O1xyXG4gICAgfVxyXG4gICAgLy/Zh9ixINmF2LTYp9io2YfbjCDYp9iyINqp2YTZhdin2Kog2K/YsSDZhdiq2YYg2b7bjNiv2Kcg2LTYr9mHINmIINix2YbaryDZhduMINi02YjZhtivXHJcbiAgICBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgcSBvZiBoaWdobGlnaHRRdWVyeSkge1xyXG4gICAgICAgIGxldCBwYXR0ZXJuID0gJyc7XHJcbiAgICAgICAgLy/YqNmHINi12YjYsdiqINii2KjYrNqp2Kog2KjYp9i02YbYryBoaWdobGlnaHRMaXN0INin2q/YsSDaqdmE2YXYp9iqINiv2KfYr9mHINi02K/ZhyDYr9ixXHJcbiAgICAgICAgaWYgKHEuaGFzT3duUHJvcGVydHkoJ25hbWUnKSkge1xyXG4gICAgICAgICAgbGV0IHdvcmRzID0gY29udGVudC5tYXRjaChuZXcgUmVnRXhwKHEubmFtZSwgXCJnbWlcIikpO1xyXG4gICAgICAgICAgaWYgKHdvcmRzKVxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcclxuICAgICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKG5ldyBSZWdFeHAocS5uYW1lLCBcImdtaVwiKSwgYDxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjoke3EuY29sb3J9XCI+JHt3b3JkfTwvc3Bhbj5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL9io2Ycg2LXZiNix2Kog2LHYtNiq2Ycg2KjYp9i02YbYryBoaWdobGlnaHRMaXN0INin2q/YsSDaqdmE2YXYp9iqINiv2KfYr9mHINi02K/ZhyDYr9ixXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBsZXQgd29yZHMgPSBjb250ZW50Lm1hdGNoKG5ldyBSZWdFeHAocSwgXCJnbWlcIikpO1xyXG4gICAgICAgICAgaWYgKHdvcmRzKVxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcclxuICAgICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKG5ldyBSZWdFeHAocSwgXCJnbWlcIiksIGA8c3BhbiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6eWVsbG93XCI+JHt3b3JkfTwvc3Bhbj5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29udGVudDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19