版博士V2.0程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

56 lines
1.7 KiB

  1. 'use strict';
  2. const matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;
  3. const stringToIcon = (value, validate, allowSimpleName, provider = "") => {
  4. const colonSeparated = value.split(":");
  5. if (value.slice(0, 1) === "@") {
  6. if (colonSeparated.length < 2 || colonSeparated.length > 3) {
  7. return null;
  8. }
  9. provider = colonSeparated.shift().slice(1);
  10. }
  11. if (colonSeparated.length > 3 || !colonSeparated.length) {
  12. return null;
  13. }
  14. if (colonSeparated.length > 1) {
  15. const name2 = colonSeparated.pop();
  16. const prefix = colonSeparated.pop();
  17. const result = {
  18. // Allow provider without '@': "provider:prefix:name"
  19. provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,
  20. prefix,
  21. name: name2
  22. };
  23. return validate && !validateIconName(result) ? null : result;
  24. }
  25. const name = colonSeparated[0];
  26. const dashSeparated = name.split("-");
  27. if (dashSeparated.length > 1) {
  28. const result = {
  29. provider,
  30. prefix: dashSeparated.shift(),
  31. name: dashSeparated.join("-")
  32. };
  33. return validate && !validateIconName(result) ? null : result;
  34. }
  35. if (allowSimpleName && provider === "") {
  36. const result = {
  37. provider,
  38. prefix: "",
  39. name
  40. };
  41. return validate && !validateIconName(result, allowSimpleName) ? null : result;
  42. }
  43. return null;
  44. };
  45. const validateIconName = (icon, allowSimpleName) => {
  46. if (!icon) {
  47. return false;
  48. }
  49. return !!((icon.provider === "" || icon.provider.match(matchIconName)) && (allowSimpleName && icon.prefix === "" || icon.prefix.match(matchIconName)) && icon.name.match(matchIconName));
  50. };
  51. exports.matchIconName = matchIconName;
  52. exports.stringToIcon = stringToIcon;
  53. exports.validateIconName = validateIconName;