create.mjs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { get } from "./basic.mjs";
  2. import { camelize } from "./format.mjs";
  3. import { isFunction } from "./validate.mjs";
  4. import locale from "../locale/index.mjs";
  5. function createTranslate(name) {
  6. const prefix = camelize(name) + ".";
  7. return (path, ...args) => {
  8. const messages = locale.messages();
  9. const message = get(messages, prefix + path) || get(messages, path);
  10. return isFunction(message) ? message(...args) : message;
  11. };
  12. }
  13. function genBem(name, mods) {
  14. if (!mods) {
  15. return "";
  16. }
  17. if (typeof mods === "string") {
  18. return ` ${name}--${mods}`;
  19. }
  20. if (Array.isArray(mods)) {
  21. return mods.reduce(
  22. (ret, item) => ret + genBem(name, item),
  23. ""
  24. );
  25. }
  26. return Object.keys(mods).reduce(
  27. (ret, key) => ret + (mods[key] ? genBem(name, key) : ""),
  28. ""
  29. );
  30. }
  31. function createBEM(name) {
  32. return (el, mods) => {
  33. if (el && typeof el !== "string") {
  34. mods = el;
  35. el = "";
  36. }
  37. el = el ? `${name}__${el}` : name;
  38. return `${el}${genBem(el, mods)}`;
  39. };
  40. }
  41. function createNamespace(name) {
  42. const prefixedName = `van-${name}`;
  43. return [
  44. prefixedName,
  45. createBEM(prefixedName),
  46. createTranslate(prefixedName)
  47. ];
  48. }
  49. export {
  50. createBEM,
  51. createNamespace,
  52. createTranslate
  53. };