mirror of
https://github.com/cupcakearmy/cometa.git
synced 2025-09-06 13:00:39 +00:00
old proto
This commit is contained in:
98
old/actions.ts
Normal file
98
old/actions.ts
Normal file
@@ -0,0 +1,98 @@
|
||||
|
||||
import { dereduce, getFromData } from "./parser"
|
||||
import { isRender, Part, re, options, error } from "../options"
|
||||
import { readFileSync } from "../util"
|
||||
import * as path from 'path'
|
||||
|
||||
/**
|
||||
* Removes all the comments from the html string
|
||||
*
|
||||
* @param {string} html - HTML to be cleaned
|
||||
*/
|
||||
export function comment(parts: Part[]): Part[] {
|
||||
return dereduce(parts, part => {
|
||||
if (!isRender(part))
|
||||
return part
|
||||
|
||||
return part.replace(new RegExp(`${re.begin}${re.comment}(.|\n)*?${re.comment}${re.ending}`, 'g'), '')
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts partials into the template
|
||||
*
|
||||
* @param {string} html - The html to be manipulated
|
||||
* @param {number} [depth] - How deep the current recursion is
|
||||
*/
|
||||
export function importer(parts: Part[], depth = 0): Part[] {
|
||||
|
||||
if (depth > options.max_recursion)
|
||||
throw new Error(error.parse.import_recursion)
|
||||
|
||||
return dereduce(parts, part => {
|
||||
if (!isRender(part))
|
||||
return part
|
||||
|
||||
const begin = re.begin + re.incude // Beginning charachter
|
||||
const ending = re.ending // Ending charachter
|
||||
|
||||
// All include statements in the html string
|
||||
const includes = part.match(new RegExp(`${begin}.*?${ending}`, 'g'))
|
||||
if (includes !== null)
|
||||
for (const i of includes) {
|
||||
|
||||
const template_name: string = i.slice(begin.length, -ending.length).trim()
|
||||
const file_name: string = path.join(options.template_dir, `${template_name}.${options.template_ext}`)
|
||||
const file: Part = readFileSync(file_name)
|
||||
const render: Part[] = importer([file], ++depth)
|
||||
|
||||
const str: Part = render[0]
|
||||
if (isRender(str))
|
||||
part = part.replace(i, str)
|
||||
|
||||
}
|
||||
return part
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
export function variables(parts: Part[], depth = 0): Part[] {
|
||||
|
||||
return dereduce(parts, part => {
|
||||
if (!isRender(part))
|
||||
return part
|
||||
|
||||
const reg_begin = new RegExp(re.begin)
|
||||
const reg_ending = new RegExp(re.ending)
|
||||
|
||||
const ret: Part[] = []
|
||||
|
||||
let begin = part.match(reg_begin) // Starting char
|
||||
while (begin !== null) {
|
||||
if (begin.index === undefined)
|
||||
throw new Error(error.parse.default)
|
||||
|
||||
// Push text before
|
||||
ret.push(part.substr(0, begin.index))
|
||||
|
||||
part = part.slice(begin.index + begin[0].length)
|
||||
|
||||
// Get closing tag
|
||||
const end = part.match(reg_ending)
|
||||
if (end === null || end.index === undefined)
|
||||
throw new Error(error.parse.default)
|
||||
|
||||
const variable_name: string = part.substring(0, end.index)
|
||||
|
||||
ret.push(data => getFromData(data, variable_name))
|
||||
|
||||
part = part.slice(end.index + end[0].length)
|
||||
|
||||
begin = part.match(reg_begin) // Starting char
|
||||
}
|
||||
|
||||
ret.push(part)
|
||||
|
||||
return ret
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user