|
import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js' |
|
import {match, charat, substr, strlen, sizeof, replace, combine, filter, assign} from './Utility.js' |
|
import {copy, lift, tokenize} from './Tokenizer.js' |
|
import {serialize} from './Serializer.js' |
|
import {prefix} from './Prefixer.js' |
|
|
|
|
|
|
|
|
|
|
|
export function middleware (collection) { |
|
var length = sizeof(collection) |
|
|
|
return function (element, index, children, callback) { |
|
var output = '' |
|
|
|
for (var i = 0; i < length; i++) |
|
output += collection[i](element, index, children, callback) || '' |
|
|
|
return output |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
export function rulesheet (callback) { |
|
return function (element) { |
|
if (!element.root) |
|
if (element = element.return) |
|
callback(element) |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function prefixer (element, index, children, callback) { |
|
if (element.length > -1) |
|
if (!element.return) |
|
switch (element.type) { |
|
case DECLARATION: element.return = prefix(element.value, element.length, children) |
|
return |
|
case KEYFRAMES: |
|
return serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback) |
|
case RULESET: |
|
if (element.length) |
|
return combine(children = element.props, function (value) { |
|
switch (match(value, callback = /(::plac\w+|:read-\w+)/)) { |
|
|
|
case ':read-only': case ':read-write': |
|
lift(copy(element, {props: [replace(value, /:(read-\w+)/, ':' + MOZ + '$1')]})) |
|
lift(copy(element, {props: [value]})) |
|
assign(element, {props: filter(children, callback)}) |
|
break |
|
|
|
case '::placeholder': |
|
lift(copy(element, {props: [replace(value, /:(plac\w+)/, ':' + WEBKIT + 'input-$1')]})) |
|
lift(copy(element, {props: [replace(value, /:(plac\w+)/, ':' + MOZ + '$1')]})) |
|
lift(copy(element, {props: [replace(value, /:(plac\w+)/, MS + 'input-$1')]})) |
|
lift(copy(element, {props: [value]})) |
|
assign(element, {props: filter(children, callback)}) |
|
break |
|
} |
|
|
|
return '' |
|
}) |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
export function namespace (element) { |
|
switch (element.type) { |
|
case RULESET: |
|
element.props = element.props.map(function (value) { |
|
return combine(tokenize(value), function (value, index, children) { |
|
switch (charat(value, 0)) { |
|
|
|
case 12: |
|
return substr(value, 1, strlen(value)) |
|
|
|
case 0: case 40: case 43: case 62: case 126: |
|
return value |
|
|
|
case 58: |
|
if (children[++index] === 'global') |
|
children[index] = '', children[++index] = '\f' + substr(children[index], index = 1, -1) |
|
|
|
case 32: |
|
return index === 1 ? '' : value |
|
default: |
|
switch (index) { |
|
case 0: element = value |
|
return sizeof(children) > 1 ? '' : value |
|
case index = sizeof(children) - 1: case 2: |
|
return index === 2 ? value + element + element : value + element |
|
default: |
|
return value |
|
} |
|
} |
|
}) |
|
}) |
|
} |
|
} |
|
|