選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

188 行
8.1KB

  1. yii.gii = (function ($) {
  2. var isActive = $('.default-view').length > 0;
  3. var initHintBlocks = function () {
  4. $('.hint-block').each(function () {
  5. var $hint = $(this);
  6. $hint.parent().find('label').addClass('help').popover({
  7. html: true,
  8. trigger: 'hover',
  9. placement: 'right',
  10. content: $hint.html()
  11. });
  12. });
  13. };
  14. var initStickyInputs = function () {
  15. $('.sticky:not(.error)').find('input[type="text"],select,textarea').each(function () {
  16. var value;
  17. if (this.tagName === 'SELECT') {
  18. value = this.options[this.selectedIndex].text;
  19. } else if (this.tagName === 'TEXTAREA') {
  20. value = $(this).html();
  21. } else {
  22. value = $(this).val();
  23. }
  24. if (value === '') {
  25. value = '[empty]';
  26. }
  27. $(this).before('<div class="sticky-value">' + value + '</div>').hide();
  28. });
  29. $('.sticky-value').on('click', function () {
  30. $(this).hide();
  31. $(this).next().show().get(0).focus();
  32. });
  33. };
  34. var initPreviewDiffLinks = function () {
  35. $('.preview-code, .diff-code, .modal-refresh, .modal-previous, .modal-next').on('click', function () {
  36. var $modal = $('#preview-modal');
  37. var $link = $(this);
  38. $modal.find('.modal-refresh').attr('href', $link.attr('href'));
  39. if ($link.hasClass('preview-code') || $link.hasClass('diff-code')) {
  40. $modal.data('action', ($link.hasClass('preview-code') ? 'preview-code' : 'diff-code'))
  41. }
  42. $modal.find('.modal-title').text($link.data('title'));
  43. $modal.find('.modal-body').html('Loading ...');
  44. $modal.modal('show');
  45. var checkbox = $('a.' + $modal.data('action') + '[href="' + $link.attr('href') + '"]').closest('tr').find('input').get(0);
  46. var checked = false;
  47. if (checkbox) {
  48. checked = checkbox.checked;
  49. $modal.find('.modal-checkbox').removeClass('disabled');
  50. } else {
  51. $modal.find('.modal-checkbox').addClass('disabled');
  52. }
  53. $modal.find('.modal-checkbox span').toggleClass('glyphicon-check', checked).toggleClass('glyphicon-unchecked', !checked);
  54. $.ajax({
  55. type: 'POST',
  56. cache: false,
  57. url: $link.prop('href'),
  58. data: $('.default-view form').serializeArray(),
  59. success: function (data) {
  60. if (!$link.hasClass('modal-refresh')) {
  61. var filesSelector = 'a.' + $modal.data('action');
  62. var $files = $(filesSelector);
  63. var index = $files.filter('[href="' + $link.attr('href') + '"]').index(filesSelector);
  64. var $prev = $files.eq(index - 1);
  65. var $next = $files.eq((index + 1 == $files.length ? 0 : index + 1));
  66. $modal.data('current', $files.eq(index));
  67. $modal.find('.modal-previous').attr('href', $prev.attr('href')).data('title', $prev.data('title'));
  68. $modal.find('.modal-next').attr('href', $next.attr('href')).data('title', $next.data('title'));
  69. }
  70. $modal.find('.modal-body').html(data);
  71. $modal.find('.content').css('max-height', ($(window).height() - 200) + 'px');
  72. },
  73. error: function (XMLHttpRequest, textStatus, errorThrown) {
  74. $modal.find('.modal-body').html('<div class="error">' + XMLHttpRequest.responseText + '</div>');
  75. }
  76. });
  77. return false;
  78. });
  79. $('#preview-modal').on('keydown', function (e) {
  80. if (e.keyCode === 37) {
  81. $('.modal-previous').trigger('click');
  82. } else if (e.keyCode === 39) {
  83. $('.modal-next').trigger('click');
  84. } else if (e.keyCode === 82) {
  85. $('.modal-refresh').trigger('click');
  86. } else if (e.keyCode === 32) {
  87. $('.modal-checkbox').trigger('click');
  88. }
  89. });
  90. $('.modal-checkbox').on('click', checkFileToggle);
  91. };
  92. var checkFileToggle = function () {
  93. var $modal = $('#preview-modal');
  94. var $checkbox = $modal.data('current').closest('tr').find('input');
  95. var checked = !$checkbox.prop('checked');
  96. $checkbox.prop('checked', checked);
  97. $modal.find('.modal-checkbox span').toggleClass('glyphicon-check', checked).toggleClass('glyphicon-unchecked', !checked);
  98. return false;
  99. };
  100. var checkAllToggle = function () {
  101. $('#check-all').prop('checked', !$('.default-view-files table .check input:enabled:not(:checked)').length);
  102. };
  103. var initConfirmationCheckboxes = function () {
  104. var $checkAll = $('#check-all');
  105. $checkAll.click(function () {
  106. $('.default-view-files table .check input:enabled').prop('checked', this.checked);
  107. });
  108. $('.default-view-files table .check input').click(function () {
  109. checkAllToggle();
  110. });
  111. checkAllToggle();
  112. };
  113. var initToggleActions = function () {
  114. $('#action-toggle :input').change(function () {
  115. $(this).parent('label').toggleClass('active', this.checked);
  116. $('.' + this.value, '.default-view-files table').toggle(this.checked).find('.check input').attr('disabled', !this.checked);
  117. checkAllToggle();
  118. });
  119. };
  120. return {
  121. autocomplete: function (counter, data) {
  122. var datum = new Bloodhound({
  123. datumTokenizer: function (d) {
  124. return Bloodhound.tokenizers.whitespace(d.word);
  125. },
  126. queryTokenizer: Bloodhound.tokenizers.whitespace,
  127. local: data
  128. });
  129. datum.initialize();
  130. jQuery('.typeahead-' + counter).typeahead(null, {displayKey: 'word', source: datum.ttAdapter()});
  131. },
  132. init: function () {
  133. initHintBlocks();
  134. initStickyInputs();
  135. initPreviewDiffLinks();
  136. initConfirmationCheckboxes();
  137. initToggleActions();
  138. // model generator: hide class name input when table name input contains *
  139. $('#model-generator #generator-tablename').change(function () {
  140. $('.field-generator-modelclass').toggle($(this).val().indexOf('*') == -1);
  141. }).change();
  142. // model generator: translate table name to model class
  143. $('#model-generator #generator-tablename').on('blur', function () {
  144. var tableName = $(this).val();
  145. if ($('#generator-modelclass').val()=='' && tableName && tableName.indexOf('*') === -1){
  146. var modelClass='';
  147. $.each(tableName.split('_'), function() {
  148. if(this.length>0)
  149. modelClass+=this.substring(0,1).toUpperCase()+this.substring(1);
  150. });
  151. $('#generator-modelclass').val(modelClass);
  152. }
  153. });
  154. // hide message category when I18N is disabled
  155. $('form #generator-enablei18n').change(function () {
  156. $('form .field-generator-messagecategory').toggle($(this).is(':checked'));
  157. }).change();
  158. // hide Generate button if any input is changed
  159. $('.default-view .form-group input,select,textarea').change(function () {
  160. $('.default-view-results,.default-view-files').hide();
  161. $('.default-view button[name="generate"]').hide();
  162. });
  163. $('.module-form #generator-moduleclass').change(function () {
  164. var value = $(this).val().match(/(\w+)\\\w+$/);
  165. var $idInput = $('#generator-moduleid');
  166. if (value && value[1] && $idInput.val() == '') {
  167. $idInput.val(value[1]);
  168. }
  169. });
  170. }
  171. };
  172. })(jQuery);