BuildExtensionButton.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace Dcat\Admin\Extension\Grid;
  3. use Dcat\Admin\Admin;
  4. use Illuminate\Contracts\Support\Renderable;
  5. class BuildExtensionButton implements Renderable
  6. {
  7. public function render()
  8. {
  9. Admin::style(
  10. <<<'CSS'
  11. .popover {max-width:350px}
  12. CSS
  13. );
  14. $this->setupScript();
  15. $label = trans('admin.new');
  16. return "<a id='create-extension' class='btn btn-success btn-sm'><i class=\"ti-plus\"></i> &nbsp;$label</a>";
  17. }
  18. protected function setupScript()
  19. {
  20. $submit = trans('admin.submit');
  21. $url = admin_url('helpers/extensions/create');
  22. Admin::script(
  23. <<<JS
  24. $('#create-extension').popover({
  25. html: true,
  26. title: false,
  27. content: function () {
  28. return '<div class="form-group " style="margin-top:5px"><error></error><div class="input-group input-group-sm"><span class="input-group-addon"><i class="ti-pencil"></i></span><input type="text" class="form-control " placeholder="Package Name" name="name" ></div></div>'
  29. + '<div class="form-group"><error></error><div class="input-group input-group-sm"><span class="input-group-addon"><i class="ti-pencil"></i></span><input type="text" class="form-control " placeholder="Namespace" name="namespace" value="Dcat\\\\Admin\\\\Extension\\\\Your name" ></div></div>'
  30. + '<button id="submit-create" class="btn btn-primary btn-sm waves-effect waves-light">{$submit}</button>'
  31. }
  32. });
  33. $('#create-extension').on('shown.bs.popover', function () {
  34. var errTpl = '<label class="control-label"><i class="fa fa-times-circle-o"></i> {msg}</label>';
  35. $('#submit-create').click(function () {
  36. var _name = $('input[name="name"]'),
  37. _namespace = $('input[name="namespace"]'),
  38. name = _name.val(),
  39. namespace = _namespace.val();
  40. if (!name) {
  41. return displayError(_name, 'The Name is required.');
  42. }
  43. if (!isValid(name) || name.indexOf('/') === -1) {
  44. return displayError(_name, 'The "'+name+'" is not a valid package name, please input a name like ":vendor/:name".');
  45. }
  46. removeError(_name);
  47. if (!namespace) {
  48. return displayError(_namespace, 'The Namespace is required.');
  49. }
  50. if (!isValid(namespace)) {
  51. return displayError(_namespace, 'The "'+namespace+'" is not a valid namespace.');
  52. }
  53. removeError(_namespace);
  54. $('.popover').loading();
  55. $.post('$url', {
  56. _token: LA.token,
  57. name: name,
  58. namespace: namespace,
  59. }, function (response) {
  60. $('.popover').loading(false);
  61. if (!response.status) {
  62. LA.error(response.message);
  63. } else {
  64. $('#create-extension').popover('hide');
  65. }
  66. $('.content').prepend('<div class="row"><div class="col-md-12">'+response.content+'</div></div>');
  67. });
  68. });
  69. function displayError(obj, msg) {
  70. obj.parents('.form-group').addClass('has-error');
  71. obj.parents('.form-group').find('error').html(errTpl.replace('{msg}', msg));
  72. }
  73. function removeError(obj) {
  74. obj.parents('.form-group').removeClass('has-error');
  75. obj.parents('.form-group').find('error').html('');
  76. }
  77. function isValid(str) {
  78. return /^[\w-\/\\\\]+$/.test(str);
  79. }
  80. });
  81. JS
  82. );
  83. }
  84. }