PageRenderTime 50ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 1ms

/lib/font-awesome-migrator.rb

https://bitbucket.org/tiu/font-awesome-migrator
Ruby | 353 lines | 332 code | 12 blank | 9 comment | 6 complexity | 9587300d0b7b00f9c7d53d426e7cefdc MD5 | raw file
  1. require "font-awesome-migrator/version"
  2. require 'set'
  3. module FontAwesomeMigrator
  4. extend self
  5. # Upgrading Fontawesome 4 to 5
  6. # https://fontawesome.com/how-to-use/upgrading-from-4#upgrade-steps
  7. # Regex will match icon helper with and without parentheses
  8. ICON_HELPER_REGEX = /(?<=icon.)(('|")(?<icon_name>[a-z\-\d]+)('|"))/
  9. ICON_CLASS_REGEX = /(fa fa-(?<icon_name>[a-z0-9\-]*))/
  10. # Icons
  11. # https://fontawesome.com/icons?d=gallery&m=free
  12. # to add another replacement: { old_class: 'old-icon-name-o' => { new_class: 'new-icon-name', prefix: 'far|fas|fab' }
  13. ICONS = {
  14. 'address-book-o' => { new_class: 'address-book', prefix: 'far' },
  15. 'address-card-o' => { new_class: 'address-card', prefix: 'far' },
  16. 'area-chart' => { new_class: 'chart-area', prefix: 'fas' },
  17. 'arrow-circle-o-down' => { new_class: 'arrow-alt-circle-down', prefix: 'far' },
  18. 'arrow-circle-o-left' => { new_class: 'arrow-alt-circle-left', prefix: 'far' },
  19. 'arrow-circle-o-right' => { new_class: 'arrow-alt-circle-right', prefix: 'far' },
  20. 'arrow-circle-o-up' => { new_class: 'arrow-alt-circle-up', prefix: 'far' },
  21. 'arrows-alt' => { new_class: 'expand-arrows-alt', prefix: 'fas' },
  22. 'arrows-h' => { new_class: 'arrows-alt-h', prefix: 'fas' },
  23. 'arrows-v' => { new_class: 'arrows-alt-v', prefix: 'fas' },
  24. 'arrows' => { new_class: 'arrows-alt', prefix: 'fas' },
  25. 'asl-interpreting' => { new_class: 'american-sign-language-interpreting', prefix: 'fas' },
  26. 'automobile' => { new_class: 'car', prefix: 'fas' },
  27. 'bank' => { new_class: 'university', prefix: 'fas' },
  28. 'bar-chart-o' => { new_class: 'chart-bar', prefix: 'far' },
  29. 'bar-chart' => { new_class: 'chart-bar', prefix: 'far' },
  30. 'bathtub' => { new_class: 'bath', prefix: 'fas' },
  31. 'battery-0' => { new_class: 'battery-empty', prefix: 'fas' },
  32. 'battery-1' => { new_class: 'battery-quarter', prefix: 'fas' },
  33. 'battery-2' => { new_class: 'battery-half', prefix: 'fas' },
  34. 'battery-3' => { new_class: 'battery-three-quarters', prefix: 'fas' },
  35. 'battery-4' => { new_class: 'battery-full', prefix: 'fas' },
  36. 'battery' => { new_class: 'battery-full', prefix: 'fas' },
  37. 'bell-o' => { new_class: 'bell', prefix: 'far' },
  38. 'bell-slash-o' => { new_class: 'bell-slash', prefix: 'far' },
  39. 'bitbucket-square' => { new_class: 'bitbucket', prefix: 'fab' },
  40. 'bitcoin' => { new_class: 'btc', prefix: 'fab' },
  41. 'bookmark-o' => { new_class: 'bookmark', prefix: 'far' },
  42. 'building-o' => { new_class: 'building', prefix: 'far' },
  43. 'cab' => { new_class: 'taxi', prefix: 'fas' },
  44. 'calendar-check-o' => { new_class: 'calendar-check', prefix: 'far' },
  45. 'calendar-minus-o' => { new_class: 'calendar-minus', prefix: 'far' },
  46. 'calendar-o' => { new_class: 'calendar', prefix: 'far' },
  47. 'calendar-plus-o' => { new_class: 'calendar-plus', prefix: 'far' },
  48. 'calendar-times-o' => { new_class: 'calendar-times', prefix: 'far' },
  49. 'calendar' => { new_class: 'calendar-alt', prefix: 'fas' },
  50. 'caret-square-o-down' => { new_class: 'caret-square-down', prefix: 'far' },
  51. 'caret-square-o-left' => { new_class: 'caret-square-left', prefix: 'far' },
  52. 'caret-square-o-right' => { new_class: 'caret-square-right', prefix: 'far' },
  53. 'caret-square-o-up' => { new_class: 'caret-square-up', prefix: 'far' },
  54. 'cc' => { new_class: 'closed-captioning', prefix: 'far' },
  55. 'chain-broken' => { new_class: 'unlink', prefix: 'fas' },
  56. 'chain' => { new_class: 'link', prefix: 'fas' },
  57. 'check-circle-o' => { new_class: 'check-circle', prefix: 'far' },
  58. 'check-square-o' => { new_class: 'check-square', prefix: 'far' },
  59. 'circle-o-notch' => { new_class: 'circle-notch', prefix: 'fas' },
  60. 'circle-o' => { new_class: 'circle', prefix: 'far' },
  61. 'circle-thin' => { new_class: 'circle', prefix: 'far' },
  62. 'clock-o' => { new_class: 'clock', prefix: 'far' },
  63. 'close' => { new_class: 'times', prefix: 'fas' },
  64. 'cloud-download' => { new_class: 'cloud-download-alt', prefix: 'fas' },
  65. 'cloud-upload' => { new_class: 'cloud-upload-alt', prefix: 'fas' },
  66. 'cny' => { new_class: 'yen-sign', prefix: 'fas' },
  67. 'code-fork' => { new_class: 'code-branch', prefix: 'fas' },
  68. 'comment-o' => { new_class: 'comment', prefix: 'far' },
  69. 'commenting-o' => { new_class: 'comment-alt', prefix: 'far' },
  70. 'commenting' => { new_class: 'comment-alt', prefix: 'fas' },
  71. 'comments-o' => { new_class: 'comments', prefix: 'far' },
  72. 'credit-card-alt' => { new_class: 'credit-card', prefix: 'fas' },
  73. 'cutlery' => { new_class: 'utensils', prefix: 'fas' },
  74. 'dashboard' => { new_class: 'tachometer-alt', prefix: 'fas' },
  75. 'deafness' => { new_class: 'deaf', prefix: 'fas' },
  76. 'dedent' => { new_class: 'outdent', prefix: 'fas' },
  77. 'diamond' => { new_class: 'gem', prefix: 'far' },
  78. 'dollar' => { new_class: 'dollar-sign', prefix: 'fas' },
  79. 'dot-circle-o' => { new_class: 'dot-circle', prefix: 'far' },
  80. 'drivers-license-o' => { new_class: 'id-card', prefix: 'far' },
  81. 'drivers-license' => { new_class: 'id-card', prefix: 'fas' },
  82. 'eercast' => { new_class: 'sellcast', prefix: 'fab' },
  83. 'envelope-o' => { new_class: 'envelope', prefix: 'far' },
  84. 'envelope-open-o' => { new_class: 'envelope-open', prefix: 'far' },
  85. 'eur' => { new_class: 'euro-sign', prefix: 'fas' },
  86. 'euro' => { new_class: 'euro-sign', prefix: 'fas' },
  87. 'exchange' => { new_class: 'exchange-alt', prefix: 'fas' },
  88. 'external-link-square' => { new_class: 'external-link-square-alt', prefix: 'fas' },
  89. 'external-link' => { new_class: 'external-link-alt', prefix: 'fas' },
  90. 'eyedropper' => { new_class: 'eye-dropper', prefix: 'fas' },
  91. 'fa' => { new_class: 'font-awesome', prefix: 'fab' },
  92. 'facebook-f' => { new_class: 'facebook-f', prefix: 'fab' },
  93. 'facebook-official' => { new_class: 'facebook', prefix: 'fab' },
  94. 'facebook' => { new_class: 'facebook-f', prefix: 'fab' },
  95. 'feed' => { new_class: 'rss', prefix: 'fas' },
  96. 'file-archive-o' => { new_class: 'file-archive', prefix: 'far' },
  97. 'file-audio-o' => { new_class: 'file-audio', prefix: 'far' },
  98. 'file-code-o' => { new_class: 'file-code', prefix: 'far' },
  99. 'file-excel-o' => { new_class: 'file-excel', prefix: 'far' },
  100. 'file-image-o' => { new_class: 'file-image', prefix: 'far' },
  101. 'file-movie-o' => { new_class: 'file-video', prefix: 'far' },
  102. 'file-o' => { new_class: 'file', prefix: 'far' },
  103. 'file-pdf-o' => { new_class: 'file-pdf', prefix: 'far' },
  104. 'file-photo-o' => { new_class: 'file-image', prefix: 'far' },
  105. 'file-picture-o' => { new_class: 'file-image', prefix: 'far' },
  106. 'file-powerpoint-o' => { new_class: 'file-powerpoint', prefix: 'far' },
  107. 'file-sound-o' => { new_class: 'file-audio', prefix: 'far' },
  108. 'file-text-o' => { new_class: 'file-alt', prefix: 'far' },
  109. 'file-text' => { new_class: 'file-alt', prefix: 'fas' },
  110. 'file-video-o' => { new_class: 'file-video', prefix: 'far' },
  111. 'file-word-o' => { new_class: 'file-word', prefix: 'far' },
  112. 'file-zip-o' => { new_class: 'file-archive', prefix: 'far' },
  113. 'files-o' => { new_class: 'copy', prefix: 'far' },
  114. 'flag-o' => { new_class: 'flag', prefix: 'far' },
  115. 'flash' => { new_class: 'bolt', prefix: 'fas' },
  116. 'floppy-o' => { new_class: 'save', prefix: 'far' },
  117. 'folder-o' => { new_class: 'folder', prefix: 'far' },
  118. 'folder-open-o' => { new_class: 'folder-open', prefix: 'far' },
  119. 'frown-o' => { new_class: 'frown', prefix: 'far' },
  120. 'futbol-o' => { new_class: 'futbol', prefix: 'far' },
  121. 'gbp' => { new_class: 'pound-sign', prefix: 'fas' },
  122. 'ge' => { new_class: 'empire', prefix: 'fab' },
  123. 'gear' => { new_class: 'cog', prefix: 'fas' },
  124. 'gears' => { new_class: 'cogs', prefix: 'fas' },
  125. 'gittip' => { new_class: 'gratipay', prefix: 'fab' },
  126. 'glass' => { new_class: 'glass-martini', prefix: 'fas' },
  127. 'google-plus-circle' => { new_class: 'google-plus', prefix: 'fab' },
  128. 'google-plus-official' => { new_class: 'google-plus', prefix: 'fab' },
  129. 'google-plus' => { new_class: 'google-plus-g', prefix: 'fab' },
  130. 'group' => { new_class: 'users', prefix: 'fas' },
  131. 'hand-grab-o' => { new_class: 'hand-rock', prefix: 'far' },
  132. 'hand-lizard-o' => { new_class: 'hand-lizard', prefix: 'far' },
  133. 'hand-o-down' => { new_class: 'hand-point-down', prefix: 'far' },
  134. 'hand-o-left' => { new_class: 'hand-point-left', prefix: 'far' },
  135. 'hand-o-right' => { new_class: 'hand-point-right', prefix: 'far' },
  136. 'hand-o-up' => { new_class: 'hand-point-up', prefix: 'far' },
  137. 'hand-paper-o' => { new_class: 'hand-paper', prefix: 'far' },
  138. 'hand-peace-o' => { new_class: 'hand-peace', prefix: 'far' },
  139. 'hand-pointer-o' => { new_class: 'hand-pointer', prefix: 'far' },
  140. 'hand-rock-o' => { new_class: 'hand-rock', prefix: 'far' },
  141. 'hand-scissors-o' => { new_class: 'hand-scissors', prefix: 'far' },
  142. 'hand-spock-o' => { new_class: 'hand-spock', prefix: 'far' },
  143. 'hand-stop-o' => { new_class: 'hand-paper', prefix: 'far' },
  144. 'handshake-o' => { new_class: 'handshake', prefix: 'far' },
  145. 'hard-of-hearing' => { new_class: 'deaf', prefix: 'fas' },
  146. 'hdd-o' => { new_class: 'hdd', prefix: 'far' },
  147. 'header' => { new_class: 'heading', prefix: 'fas' },
  148. 'heart-o' => { new_class: 'heart', prefix: 'far' },
  149. 'hospital-o' => { new_class: 'hospital', prefix: 'far' },
  150. 'hotel' => { new_class: 'bed', prefix: 'fas' },
  151. 'hourglass-1' => { new_class: 'hourglass-start', prefix: 'fas' },
  152. 'hourglass-2' => { new_class: 'hourglass-half', prefix: 'fas' },
  153. 'hourglass-3' => { new_class: 'hourglass-end', prefix: 'fas' },
  154. 'hourglass-o' => { new_class: 'hourglass', prefix: 'far' },
  155. 'id-card-o' => { new_class: 'id-card', prefix: 'far' },
  156. 'ils' => { new_class: 'shekel-sign', prefix: 'fas' },
  157. 'image' => { new_class: 'image', prefix: 'far' },
  158. 'inr' => { new_class: 'rupee-sign', prefix: 'fas' },
  159. 'institution' => { new_class: 'university', prefix: 'fas' },
  160. 'intersex' => { new_class: 'transgender', prefix: 'fas' },
  161. 'jpy' => { new_class: 'yen-sign', prefix: 'fas' },
  162. 'keyboard-o' => { new_class: 'keyboard', prefix: 'far' },
  163. 'krw' => { new_class: 'won-sign', prefix: 'fas' },
  164. 'legal' => { new_class: 'gavel', prefix: 'fas' },
  165. 'lemon-o' => { new_class: 'lemon', prefix: 'far' },
  166. 'level-down' => { new_class: 'level-down-alt', prefix: 'fas' },
  167. 'level-up' => { new_class: 'level-up-alt', prefix: 'fas' },
  168. 'life-bouy' => { new_class: 'life-ring', prefix: 'far' },
  169. 'life-buoy' => { new_class: 'life-ring', prefix: 'far' },
  170. 'life-saver' => { new_class: 'life-ring', prefix: 'far' },
  171. 'lightbulb-o' => { new_class: 'lightbulb', prefix: 'far' },
  172. 'line-chart' => { new_class: 'chart-line', prefix: 'fas' },
  173. 'linkedin-square' => { new_class: 'linkedin', prefix: 'fab' },
  174. 'linkedin' => { new_class: 'linkedin-in', prefix: 'fab' },
  175. 'long-arrow-down' => { new_class: 'long-arrow-alt-down', prefix: 'fas' },
  176. 'long-arrow-left' => { new_class: 'long-arrow-alt-left', prefix: 'fas' },
  177. 'long-arrow-right' => { new_class: 'long-arrow-alt-right', prefix: 'fas' },
  178. 'long-arrow-up' => { new_class: 'long-arrow-alt-up', prefix: 'fas' },
  179. 'mail-forward' => { new_class: 'share', prefix: 'fas' },
  180. 'mail-reply-all' => { new_class: 'reply-all', prefix: 'fas' },
  181. 'mail-reply' => { new_class: 'reply', prefix: 'fas' },
  182. 'map-marker' => { new_class: 'map-marker-alt', prefix: 'fas' },
  183. 'map-o' => { new_class: 'map', prefix: 'far' },
  184. 'meanpath' => { new_class: 'font-awesome', prefix: 'fab' },
  185. 'meh-o' => { new_class: 'meh', prefix: 'far' },
  186. 'minus-square-o' => { new_class: 'minus-square', prefix: 'far' },
  187. 'mobile-phone' => { new_class: 'mobile-alt', prefix: 'fas' },
  188. 'mobile' => { new_class: 'mobile-alt', prefix: 'fas' },
  189. 'money' => { new_class: 'money-bill-alt', prefix: 'far' },
  190. 'moon-o' => { new_class: 'moon', prefix: 'far' },
  191. 'mortar-board' => { new_class: 'graduation-cap', prefix: 'fas' },
  192. 'navicon' => { new_class: 'bars', prefix: 'fas' },
  193. 'newspaper-o' => { new_class: 'newspaper', prefix: 'far' },
  194. 'paper-plane-o' => { new_class: 'paper-plane', prefix: 'far' },
  195. 'paste' => { new_class: 'clipboard', prefix: 'far' },
  196. 'pause-circle-o' => { new_class: 'pause-circle', prefix: 'far' },
  197. 'pencil-square-o' => { new_class: 'edit', prefix: 'far' },
  198. 'pencil-square' => { new_class: 'pen-square', prefix: 'fas' },
  199. 'pencil' => { new_class: 'pencil-alt', prefix: 'fas' },
  200. 'photo' => { new_class: 'image', prefix: 'far' },
  201. 'picture-o' => { new_class: 'image', prefix: 'far' },
  202. 'pie-chart' => { new_class: 'chart-pie', prefix: 'fas' },
  203. 'play-circle-o' => { new_class: 'play-circle', prefix: 'far' },
  204. 'plus-square-o' => { new_class: 'plus-square', prefix: 'far' },
  205. 'question-circle-o' => { new_class: 'question-circle', prefix: 'far' },
  206. 'ra' => { new_class: 'rebel', prefix: 'fab' },
  207. 'refresh' => { new_class: 'sync', prefix: 'fas' },
  208. 'remove' => { new_class: 'times', prefix: 'fas' },
  209. 'reorder' => { new_class: 'bars', prefix: 'fas' },
  210. 'repeat' => { new_class: 'redo', prefix: 'fas' },
  211. 'resistance' => { new_class: 'rebel', prefix: 'fab' },
  212. 'rmb' => { new_class: 'yen-sign', prefix: 'fas' },
  213. 'rotate-left' => { new_class: 'undo', prefix: 'fas' },
  214. 'rotate-right' => { new_class: 'redo', prefix: 'fas' },
  215. 'rouble' => { new_class: 'ruble-sign', prefix: 'fas' },
  216. 'rub' => { new_class: 'ruble-sign', prefix: 'fas' },
  217. 'ruble' => { new_class: 'ruble-sign', prefix: 'fas' },
  218. 'rupee' => { new_class: 'rupee-sign', prefix: 'fas' },
  219. 's15' => { new_class: 'bath', prefix: 'fas' },
  220. 'scissors' => { new_class: 'cut', prefix: 'fas' },
  221. 'send-o' => { new_class: 'paper-plane', prefix: 'far' },
  222. 'send' => { new_class: 'paper-plane', prefix: 'fas' },
  223. 'share-square-o' => { new_class: 'share-square', prefix: 'far' },
  224. 'shekel' => { new_class: 'shekel-sign', prefix: 'fas' },
  225. 'sheqel' => { new_class: 'shekel-sign', prefix: 'fas' },
  226. 'shield' => { new_class: 'shield-alt', prefix: 'fas' },
  227. 'sign-in' => { new_class: 'sign-in-alt', prefix: 'fas' },
  228. 'sign-out' => { new_class: 'sign-out-alt', prefix: 'fas' },
  229. 'signing' => { new_class: 'sign-language', prefix: 'fas' },
  230. 'sliders' => { new_class: 'sliders-h', prefix: 'fas' },
  231. 'smile-o' => { new_class: 'smile', prefix: 'far' },
  232. 'snowflake-o' => { new_class: 'snowflake', prefix: 'far' },
  233. 'soccer-ball-o' => { new_class: 'futbol', prefix: 'far' },
  234. 'sort-alpha-asc' => { new_class: 'sort-alpha-down', prefix: 'fas' },
  235. 'sort-alpha-desc' => { new_class: 'sort-alpha-up', prefix: 'fas' },
  236. 'sort-amount-asc' => { new_class: 'sort-amount-down', prefix: 'fas' },
  237. 'sort-amount-desc' => { new_class: 'sort-amount-up', prefix: 'fas' },
  238. 'sort-asc' => { new_class: 'sort-up', prefix: 'fas' },
  239. 'sort-desc' => { new_class: 'sort-down', prefix: 'fas' },
  240. 'sort-numeric-asc' => { new_class: 'sort-numeric-down', prefix: 'fas' },
  241. 'sort-numeric-desc' => { new_class: 'sort-numeric-up', prefix: 'fas' },
  242. 'spoon' => { new_class: 'utensil-spoon', prefix: 'fas' },
  243. 'square-o' => { new_class: 'square', prefix: 'far' },
  244. 'star-half-empty' => { new_class: 'star-half', prefix: 'far' },
  245. 'star-half-full' => { new_class: 'star-half', prefix: 'far' },
  246. 'star-half-o' => { new_class: 'star-half', prefix: 'far' },
  247. 'star-o' => { new_class: 'star', prefix: 'far' },
  248. 'sticky-note-o' => { new_class: 'sticky-note', prefix: 'far' },
  249. 'stop-circle-o' => { new_class: 'stop-circle', prefix: 'far' },
  250. 'sun-o' => { new_class: 'sun', prefix: 'far' },
  251. 'support' => { new_class: 'life-ring', prefix: 'far' },
  252. 'tablet' => { new_class: 'tablet-alt', prefix: 'fas' },
  253. 'tachometer' => { new_class: 'tachometer-alt', prefix: 'fas' },
  254. 'television' => { new_class: 'tv', prefix: 'fas' },
  255. 'thermometer-0' => { new_class: 'thermometer-empty', prefix: 'fas' },
  256. 'thermometer-1' => { new_class: 'thermometer-quarter', prefix: 'fas' },
  257. 'thermometer-2' => { new_class: 'thermometer-half', prefix: 'fas' },
  258. 'thermometer-3' => { new_class: 'thermometer-three-quarters', prefix: 'fas' },
  259. 'thermometer-4' => { new_class: 'thermometer-full', prefix: 'fas' },
  260. 'thermometer' => { new_class: 'thermometer-full', prefix: 'fas' },
  261. 'thumb-tack' => { new_class: 'thumbtack', prefix: 'fas' },
  262. 'thumbs-o-down' => { new_class: 'thumbs-down', prefix: 'far' },
  263. 'thumbs-o-up' => { new_class: 'thumbs-up', prefix: 'far' },
  264. 'ticket' => { new_class: 'ticket-alt', prefix: 'fas' },
  265. 'times-circle-o' => { new_class: 'times-circle', prefix: 'far' },
  266. 'times-rectangle-o' => { new_class: 'window-close', prefix: 'far' },
  267. 'times-rectangle' => { new_class: 'window-close', prefix: 'fas' },
  268. 'toggle-down' => { new_class: 'caret-square-down', prefix: 'far' },
  269. 'toggle-left' => { new_class: 'caret-square-left', prefix: 'far' },
  270. 'toggle-right' => { new_class: 'caret-square-right', prefix: 'far' },
  271. 'toggle-up' => { new_class: 'caret-square-up', prefix: 'far' },
  272. 'trash-o' => { new_class: 'trash-alt', prefix: 'far' },
  273. 'trash' => { new_class: 'trash-alt', prefix: 'fas' },
  274. 'try' => { new_class: 'lira-sign', prefix: 'fas' },
  275. 'turkish-lira' => { new_class: 'lira-sign', prefix: 'fas' },
  276. 'unsorted' => { new_class: 'sort', prefix: 'fas' },
  277. 'usd' => { new_class: 'dollar-sign', prefix: 'fas' },
  278. 'user-circle-o' => { new_class: 'user-circle', prefix: 'far' },
  279. 'user-o' => { new_class: 'user', prefix: 'far' },
  280. 'vcard-o' => { new_class: 'address-card', prefix: 'far' },
  281. 'vcard' => { new_class: 'address-card', prefix: 'fas' },
  282. 'video-camera' => { new_class: 'video', prefix: 'fas' },
  283. 'vimeo' => { new_class: 'vimeo-v', prefix: 'fab' },
  284. 'volume-control-phone' => { new_class: 'phone-volume', prefix: 'fas' },
  285. 'warning' => { new_class: 'exclamation-triangle', prefix: 'fas' },
  286. 'wechat' => { new_class: 'weixin', prefix: 'fab' },
  287. 'wheelchair-alt' => { new_class: 'accessible-icon', prefix: 'fab' },
  288. 'window-close-o' => { new_class: 'window-close', prefix: 'far' },
  289. 'won' => { new_class: 'won-sign', prefix: 'fas' },
  290. 'y-combinator-square' => { new_class: 'hacker-news', prefix: 'fab' },
  291. 'yc-square' => { new_class: 'hacker-news', prefix: 'fab' },
  292. 'yc' => { new_class: 'y-combinator', prefix: 'fab' },
  293. 'yen' => { new_class: 'yen-sign', prefix: 'fas' },
  294. 'youtube-play' => { new_class: 'youtube', prefix: 'fab' },
  295. 'youtube-square' => { new_class: 'youtube', prefix: 'fab' }
  296. }.freeze
  297. BRANDS = %w[500px adn amazon android angellist apple bandcamp behance behance-square bitbucket bitbucket-square bitcoin (alias) black-tie bluetooth bluetooth-b btc buysellads cc-amex cc-diners-club cc-discover cc-jcb cc-mastercard cc-paypal cc-stripe cc-visa chrome codepen codiepie connectdevelop contao css3 dashcube delicious deviantart digg dribbble dropbox drupal edge eercast empire envira etsy expeditedssl fa (alias) facebook facebook-f (alias) facebook-official facebook-square firefox first-order flickr font-awesome fonticons fort-awesome forumbee foursquare free-code-camp ge (alias) get-pocket gg gg-circle git git-square github github-alt github-square gitlab gittip (alias) glide glide-g google google-plus google-plus-circle (alias) google-plus-official google-plus-square google-wallet gratipay grav hacker-news houzz html5 imdb instagram internet-explorer ioxhost joomla jsfiddle lastfm lastfm-square leanpub linkedin linkedin-square linode linux maxcdn meanpath medium meetup mixcloud modx odnoklassniki odnoklassniki-square opencart openid opera optin-monster pagelines paypal pied-piper pied-piper-alt pied-piper-pp pinterest pinterest-p pinterest-square product-hunt qq quora ra (alias) ravelry rebel reddit reddit-alien reddit-square renren resistance (alias) safari scribd sellsy share-alt share-alt-square shirtsinbulk simplybuilt skyatlas skype slack slideshare snapchat snapchat-ghost snapchat-square soundcloud spotify stack-exchange stack-overflow steam steam-square stumbleupon stumbleupon-circle superpowers telegram tencent-weibo themeisle trello tripadvisor tumblr tumblr-square twitch twitter twitter-square usb viacoin viadeo viadeo-square vimeo vimeo-square vine vk wechat (alias) weibo weixin whatsapp wikipedia-w windows wordpress wpbeginner wpexplorer wpforms xing xing-square y-combinator y-combinator-square (alias) yahoo yc (alias) yc-square (alias) yelp yoast youtube youtube-play youtube-square].to_set.freeze
  298. NEW_PREFIXES = %w[fab far fas].to_set.freeze
  299. # Takes in a line, looks for icon helper, replaces them if found
  300. # Next, looks for icon classes, replaces them if found
  301. # Returns the updated line
  302. def replace(line)
  303. updated_helper_line = line.gsub(ICON_HELPER_REGEX) do |match|
  304. new_icon = getNewIcon($~[:icon_name])
  305. if new_icon
  306. "'#{new_icon[:prefix]}', '#{new_icon[:new_class]}'"
  307. else
  308. match
  309. end
  310. end
  311. updated_class_line = updated_helper_line.gsub(ICON_CLASS_REGEX) do |match|
  312. new_icon = getNewIcon($~[:icon_name])
  313. if new_icon
  314. "#{new_icon[:prefix]} fa-#{new_icon[:new_class]}"
  315. else
  316. match
  317. end
  318. end
  319. if updated_class_line != line
  320. return updated_class_line
  321. else
  322. return nil
  323. end
  324. end
  325. def getNewIcon(old_icon_name)
  326. unless NEW_PREFIXES.include?(old_icon_name)
  327. new_icon = ICONS[old_icon_name]
  328. if new_icon.nil?
  329. new_icon =
  330. if BRANDS.include?(old_icon_name)
  331. { new_class: old_icon_name, prefix: 'fab' }
  332. elsif old_icon_name.end_with?("-o")
  333. { new_class: old_icon_name.sub("-o", ""), prefix: 'far' }
  334. else
  335. { new_class: old_icon_name, prefix: 'fas' }
  336. end
  337. end
  338. return new_icon
  339. end
  340. end
  341. end