%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/emergentqj/actioncivile/pre-auth/.4cc3a2e1590a4463a5f392ddcc26929e/static/node_modules/input-format/source/
Upload File :
Create Path :
Current File : /home/emergentqj/actioncivile/pre-auth/.4cc3a2e1590a4463a5f392ddcc26929e/static/node_modules/input-format/source/templateFormatter.js

import { count_occurences } from './helpers.js'
import close_braces from './closeBraces.js'

// Takes a `template` where character placeholders
// are denoted by 'x'es (e.g. 'x (xxx) xxx-xx-xx').
//
// Returns a function which takes `value` characters
// and returns the `template` filled with those characters.
// If the `template` can only be partially filled
// then it is cut off.
//
// If `should_close_braces` is `true`,
// then it will also make sure all dangling braces are closed,
// e.g. "8 (8" -> "8 (8  )" (iPhone style phone number input).
//
export default function(template, placeholder = 'x', should_close_braces)
{
	if (!template)
	{
		return value => ({ text: value })
	}

	const characters_in_template = count_occurences(placeholder, template)

	return function(value)
	{
		if (!value)
		{
			return { text: '', template }
		}

		let value_character_index = 0
		let filled_in_template = ''

		// Using `.split('')` here instead of normal `for ... of`
		// because the importing application doesn't neccessarily include an ES6 polyfill.
		// The `.split('')` approach discards "exotic" UTF-8 characters
		// (the ones consisting of four bytes)
		// but template placeholder characters don't fall into that range
		// and appending UTF-8 characters to a string in parts still works.
		for (const character of template.split(''))
		{
			if (character !== placeholder)
			{
				filled_in_template += character
				continue
			}

			filled_in_template += value[value_character_index]
			value_character_index++

			// If the last available value character has been filled in,
			// then return the filled in template
			// (either trim the right part or retain it,
			//  if no more character placeholders in there)
			if (value_character_index === value.length)
			{
				// If there are more character placeholders
				// in the right part of the template
				// then simply trim it.
				if (value.length < characters_in_template)
				{
					break
				}
			}
		}

		if (should_close_braces)
		{
			filled_in_template = close_braces(filled_in_template, template)
		}

		return { text: filled_in_template, template }
	}
}

Zerion Mini Shell 1.0