ui.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. //= require rails_admin/custom/ckeditor_ajax
  2. (function($) {
  3. function nearestField($input) {
  4. return $input.closest('.form-group, .control-group');
  5. }
  6. function buildProductLocaleTabs() {
  7. var $form = $('form').filter(function() {
  8. return $(this).find('[name="product[name]"]').length > 0;
  9. }).first();
  10. if ($form.length === 0) {
  11. return;
  12. }
  13. var fieldMap = [
  14. {
  15. key: 'zh-CN',
  16. label: '简体中文',
  17. nameField: nearestField($form.find('[name="product[name]"]')),
  18. detailField: nearestField($form.find('[name="product[detail]"]'))
  19. },
  20. {
  21. key: 'en',
  22. label: 'English',
  23. nameField: nearestField($form.find('[name="product[name_en]"]')),
  24. detailField: nearestField($form.find('[name="product[detail_en]"]'))
  25. },
  26. {
  27. key: 'ru',
  28. label: 'Русский',
  29. nameField: nearestField($form.find('[name="product[name_ru]"]')),
  30. detailField: nearestField($form.find('[name="product[detail_ru]"]'))
  31. },
  32. {
  33. key: 'zh-TW',
  34. label: '繁體中文',
  35. nameField: nearestField($form.find('[name="product[name_tw]"]')),
  36. detailField: nearestField($form.find('[name="product[detail_tw]"]'))
  37. }
  38. ];
  39. if ($form.find('.product-locale-tabs').length > 0) {
  40. return;
  41. }
  42. var hasAllFields = true;
  43. $.each(fieldMap, function(_, group) {
  44. if (group.nameField.length === 0 || group.detailField.length === 0) {
  45. hasAllFields = false;
  46. return false;
  47. }
  48. });
  49. if (!hasAllFields) {
  50. return;
  51. }
  52. var $anchor = fieldMap[0].nameField;
  53. var $mount = $('<div class="product-locale-tabs-mount"></div>');
  54. $anchor.before($mount);
  55. var $tabs = $('<div class="product-locale-tabs"></div>');
  56. var $header = $('<div class="product-locale-tabs-header"><div><h4>商品多语言内容</h4><p>名称与详情按语言分别维护,未填写时接口默认回退到简体中文。</p></div></div>');
  57. var $nav = $('<ul class="nav nav-tabs product-locale-tabs-nav" role="tablist"></ul>');
  58. var $content = $('<div class="tab-content product-locale-tabs-content"></div>');
  59. $.each(fieldMap, function(index, group) {
  60. var tabId = 'product-locale-tab-' + group.key.replace(/[^a-zA-Z0-9]/g, '-').toLowerCase();
  61. var activeClass = index === 0 ? 'active' : '';
  62. var $navItem = $('<li role="presentation" class="' + activeClass + '"></li>');
  63. var $link = $('<a data-toggle="tab" role="tab"></a>');
  64. $link.attr('href', '#' + tabId);
  65. $link.append($('<span class="product-locale-tab-title"></span>').text(group.label));
  66. $link.append($('<span class="product-locale-tab-code"></span>').text(group.key));
  67. $navItem.append($link);
  68. $nav.append($navItem);
  69. var $pane = $('<div role="tabpanel" class="tab-pane product-locale-pane ' + activeClass + '" id="' + tabId + '"></div>');
  70. $pane.append(group.nameField);
  71. $pane.append(group.detailField);
  72. $content.append($pane);
  73. });
  74. $tabs.append($header).append($nav).append($content);
  75. $mount.replaceWith($tabs);
  76. }
  77. $(document).on('ready page:load turbolinks:load', buildProductLocaleTabs);
  78. })(jQuery);