Files
asan-service/plugins/ATextSplitterVuePlugin.client.js
2023-08-17 13:05:51 +03:30

79 lines
2.9 KiB
JavaScript

/* eslint-disable no-undef */
/// ///////////////////////////////////////////////////////////
/// /////////////////// custom text splitor created by ammiiir1
/// ////// (amir.i.iii.vii.iii@gmail.com | ammiiir1@gmail.com )
// (https://gitlab.com/ammiiir1 | https://github.com/ammiiir1)
import Vue from 'vue'
class ATextSplitterVuePlugin {
/// ///////////////////////////////////////////////////////////////////////////////////
/// text animation#1
// .staggerFrom($("#txtID .tsWords"), 0.5, {cycle: {y: [20, -20]}, opacity: 0}, 0.1, 0)
// ************************************************************************************
/// text animation#2
// .staggerFrom($("#txtID .tsLetters"), 0.2, {scale: 5, opacity: 0}, 0.07)
// ************************************************************************************
// text animation#3
// .staggerFrom($("#txtID .tsWords"), 0.4, {scale:2,opacity: 0}, 0.015,1.4)
// ************************************************************************************
/// text animation#4
// .staggerFrom($("#txtID .tsWords"), 0.3, {opacity: 0}, 0.07)
// ************************************************************************************
constructor({ rtl = false, letterSpace = 0, wordSpace = '3px' } = {}) {
// options
this.rtl = rtl
this.letterSpace = letterSpace + 'px'
this.wordSpace = wordSpace + 'px'
// pipeline vars
this.word = ''
this.letterSpans = ''
this.wordSpans = ''
}
/// /////////////////////////////////////////////// private classes
_split(strOrId, isElement = true) {
// pipeline
const line = isElement ? $(`#${strOrId}`).text() : strOrId // get the sentence
const parts = line.split(' ')
for (let i = 0; i < parts.length; i++) {
// how many words
this.letterSpans = ''
this.word = parts[i]
for (let j = 0; j < this.word.length; j++) {
// how many letters in each words
this.letterSpans += '<span class="tsLetters">' + this.word[j] + '</span>' // creat a span for each letter
}
this.wordSpans += '<span class="tsWords">' + this.letterSpans + ' </span>'
}
}
_setStyles(txtID) {
$(`#${txtID} .tsLetters`).css({
display: this.rtl ? 'inline' : 'inline-block',
marginRight: this.rtl ? 0 : this.letterSpace,
marginLeft: this.rtl ? this.letterSpace : 0
})
$(`#${txtID} .tsWords`).css({
display: 'inline-block',
marginRight: this.rtl ? 0 : this.wordSpace,
marginLeft: this.rtl ? this.wordSpace : 0
})
}
/// /////////////////////////////////////////////// output methods
injectToElement(txtID) {
this._split(txtID, true)
$(`#${txtID}`).html(this.wordSpans) // render the sentence
this._setStyles(txtID)
}
returnString(str) {
this._split(str, false)
return this.wordSpans // return splitted string
}
}
Vue.prototype.$ATextSplitter = ATextSplitterVuePlugin