ui.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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 $tabs = $('<div class="product-locale-tabs"></div>');
  54. var $header = $('<div class="product-locale-tabs-header"><div><h4>商品多语言内容</h4><p>名称与详情按语言分别维护,未填写时接口默认回退到简体中文。</p></div></div>');
  55. var $nav = $('<ul class="nav nav-tabs product-locale-tabs-nav" role="tablist"></ul>');
  56. var $content = $('<div class="tab-content product-locale-tabs-content"></div>');
  57. $.each(fieldMap, function(index, group) {
  58. var tabId = 'product-locale-tab-' + group.key.replace(/[^a-zA-Z0-9]/g, '-').toLowerCase();
  59. var activeClass = index === 0 ? 'active' : '';
  60. var $navItem = $('<li role="presentation" class="' + activeClass + '"></li>');
  61. var $link = $('<a data-toggle="tab" role="tab"></a>');
  62. $link.attr('href', '#' + tabId);
  63. $link.append($('<span class="product-locale-tab-title"></span>').text(group.label));
  64. $link.append($('<span class="product-locale-tab-code"></span>').text(group.key));
  65. $navItem.append($link);
  66. $nav.append($navItem);
  67. var $pane = $('<div role="tabpanel" class="tab-pane product-locale-pane ' + activeClass + '" id="' + tabId + '"></div>');
  68. $pane.append(group.nameField);
  69. $pane.append(group.detailField);
  70. $content.append($pane);
  71. });
  72. $tabs.append($header).append($nav).append($content);
  73. $anchor.before($tabs);
  74. }
  75. $(document).on('ready page:load turbolinks:load', buildProductLocaleTabs);
  76. })(jQuery);