editor.js 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620
  1. //Crea template y tipos de elementos
  2. const institucionales = editor => {
  3. editor.DomComponents.addType('main', {
  4. model: {
  5. defaults: {
  6. tagName: 'main',
  7. type: 'default',
  8. removable: false,
  9. resizable: false,
  10. draggable: '[data-gjs-type=wrapper]',
  11. copyable: false,
  12. stylable: ['background','background-color'],
  13. classes: 'centro',
  14. },
  15. }
  16. });
  17. editor.DomComponents.addType('referencias', {
  18. model: {
  19. defaults: {
  20. tagName: 'div',
  21. type: 'default',
  22. removable: false,
  23. resizable: false,
  24. draggable: false,
  25. droppable: false,
  26. copyable: false,
  27. stylable: false,
  28. classes: 'referencias',
  29. components: [
  30. {
  31. type: 'label',
  32. selectable: false,
  33. editable: false,
  34. badgable: false,
  35. draggable: false,
  36. content: 'Referencias:',
  37. style:{
  38. 'font-weight': 'bold',
  39. }
  40. },
  41. {
  42. type: 'text',
  43. removable: false,
  44. resizable: false,
  45. draggable: false,
  46. droppable: false,
  47. copyable: false,
  48. stylable: false,
  49. name:'Referencias',
  50. content: 'Listado de referencias',
  51. style: {
  52. 'margin-top': '10px',
  53. },
  54. },
  55. ],
  56. },
  57. }
  58. });
  59. editor.DomComponents.addType('iconos', {
  60. model: {
  61. defaults: {
  62. tagName: 'div',
  63. type: 'default',
  64. resizable: false,
  65. stylable: ['font-size','color','background-color','transform','transform-rotate-x', 'transform-rotate-y', 'transform-rotate-z'],
  66. },
  67. },
  68. view: {
  69. events: {
  70. dblclick: 'onActive',
  71. },
  72. onActive(event) {
  73. editor.runCommand('modal-iconos', {
  74. target: this.model,
  75. });
  76. },
  77. }
  78. });
  79. editor.DomComponents.addType('figuras', {
  80. model: {
  81. defaults: {
  82. tagName: 'div',
  83. type: 'text',
  84. editable: true,
  85. //resizable: false,
  86. stylable: ['width','height','font-size','font-weight','color','background-color','border', 'border-style', 'border-color', 'border-width','transform','transform-rotate-x', 'transform-rotate-y', 'transform-rotate-z'],
  87. },
  88. },
  89. view: {
  90. events: {
  91. dblclick: 'onActive',
  92. },
  93. onActive(event) {
  94. editor.runCommand('modal-figuras', {
  95. target: this.model,
  96. });
  97. },
  98. }
  99. });
  100. }
  101. $iconos = [];
  102. $.get("fonts/iconos/iconos.txt",function(data){
  103. $iconos = data.split(",");
  104. });
  105. //Inicializa el editor
  106. const editor = grapesjs.init({
  107. container: '#cartel',
  108. fromElement: true,
  109. width: 'auto',
  110. //Manejo del almacenamiento
  111. storageManager: {
  112. id: 'gjs-', // Prefix identifier that will be used inside storing and loading
  113. type: 'local', // Type of the storage
  114. autosave: false, // Store data automatically
  115. autoload: false, // Autoload stored data on init
  116. stepsBeforeSave: 1, // If autosave enabled, indicates how many changes are necessary before store method is triggered
  117. storeComponents: false, // Enable/Disable storing of components in JSON format
  118. storeStyles: false, // Enable/Disable storing of rules in JSON format
  119. storeHtml: false, // Enable/Disable storing of components as HTML string
  120. storeCss: false, // Enable/Disable storing of rules as CSS string
  121. },
  122. //Agrega las hojas de estilo externas
  123. canvas: {
  124. styles: ['css/indivisa.css', 'css/secciones/wrapper.css','css/secciones/iconos.css']
  125. },
  126. //Evita el bug de que se cargue doble el styleManager
  127. styleManager: {
  128. clearProperties: true,
  129. },
  130. //Agrega plugins
  131. plugins: [institucionales,'gjs-preset-webpage'],
  132. //Personaliza plugins
  133. pluginsOpts: {
  134. 'gjs-preset-webpage':{
  135. blocks: ['text'],
  136. formsOpts: false,
  137. navbarOpts: false,
  138. countdownOpts: false,
  139. exportOpts: false,
  140. },
  141. }
  142. });
  143. //Agrega botón limpiar
  144. editor.Panels.addButton('options',{
  145. id: 'borrar',
  146. className: 'fa fa-trash',
  147. attributes: { title: 'Clear canvas'},
  148. command(editor) {
  149. $('#modalDemo').modal({backdrop: "static"});
  150. $('.modal-text').children('div.modal-text-bold').text('¿Estás seguro de borrar todo?');
  151. $('.modal-text').children('div.modal-text-italic').text('Se perderá cualquier modificación que hayas realizado.');
  152. $('#okModal').data('id','2');
  153. },
  154. active: false,
  155. });
  156. //Activa vista de elementos por default, en Firefox no funciona
  157. editor.Panels.getButton('options', 'sw-visibility').set('active', false);
  158. //Desactiva algunos paneles y botones
  159. editor.Panels.removePanel('devices-c');
  160. editor.Panels.removePanel('commands');
  161. editor.Panels.removeButton('options','preview');
  162. editor.Panels.removeButton('options','fullscreen');
  163. editor.Panels.removeButton('options','export-template');
  164. editor.Panels.removeButton('options','gjs-open-import-webpage');
  165. editor.Panels.removeButton('options','canvas-clear');
  166. //Agrega los comandos para el manejo de los modal
  167. editor.Commands.add("modal-iconos", {
  168. run(editor, sender, opts={}) {
  169. const modal = editor.Modal;
  170. const target = opts.target;
  171. main = document.createElement("div");
  172. container = document.createElement("div");
  173. container.className = 'd-flex flex-column flex-wrap pt-2';
  174. flexiconos = document.createElement("div");
  175. flexiconos.className = 'd-flex flex-row flex-wrap justify-content-center';
  176. $.each($iconos, function(index, value){
  177. box = document.createElement("div");
  178. box.className = 'gjs-one-bg gjs-four-color-h bloque';
  179. icono = document.createElement("div");
  180. icono.className = 'iconos '+ value;
  181. box.appendChild(icono);
  182. box.onclick = () => {
  183. let modelThumbElement = target;
  184. modelThumbElement.setClass('iconos ' + value);
  185. modelThumbElement.set({'content': ''});
  186. modal.close();
  187. }
  188. flexiconos.appendChild(box);
  189. });
  190. paso = document.createElement('div');
  191. paso.textContent = 'Da clic en el ícono que deseas agregar';
  192. container.appendChild(paso);
  193. container.appendChild(flexiconos);
  194. modal.setContent(container);
  195. modal.open({
  196. title: "Selector de íconos",
  197. content: container,
  198. }).getModel().once("change:open", () => editor.stopCommand(this.id));
  199. return this;
  200. },
  201. stop(editor) {
  202. editor.Modal.close();
  203. return this;
  204. }
  205. });
  206. editor.Commands.add("modal-figuras", {
  207. run(editor, sender, opts={}) {
  208. const modal = editor.Modal;
  209. const target = opts.target;
  210. main = document.createElement('div')
  211. container = document.createElement('div');
  212. container.className = 'd-flex flex-column flex-wrap pt-2';
  213. paso1 = document.createElement('div');
  214. paso1.textContent = '1.- Escribe el texto que llevará la figura en caso de ser necesario';
  215. container.appendChild(paso1);
  216. textarea = document.createElement('textarea');
  217. textarea.id = 'textoFigura';
  218. textarea.placeholder = 'Escribe tu texto aquí';
  219. textarea.className = 'my-2 p-2';
  220. if (target.get('content') === '' || target.get('content') === 'Sin Figura')
  221. textarea.value = '';
  222. else
  223. textarea.value = target.get('content');
  224. textarea.rows = 5;
  225. container.appendChild(textarea);
  226. paso2 = document.createElement('div');
  227. paso2.textContent = '2.- Elige la forma de la figura a utilizar';
  228. container.appendChild(paso2);
  229. flexfiguras = document.createElement("div");
  230. flexfiguras.className = 'd-flex flex-row flex-wrap justify-content-center';
  231. box = document.createElement("div");
  232. box.className = 'gjs-one-bg gjs-four-color-h bloque bloqueGde';
  233. icono = document.createElement("div");
  234. icono.className = 'circulo';
  235. box.appendChild(icono);
  236. box.onclick = () => {
  237. let modelThumbElement = target;
  238. modelThumbElement.setClass('figura circulo');
  239. modelThumbElement.set({'content': document.getElementById('textoFigura').value});
  240. modal.close();
  241. }
  242. flexfiguras.appendChild(box);
  243. box = document.createElement("div");
  244. box.className = 'gjs-one-bg gjs-four-color-h bloque bloqueGde';
  245. icono = document.createElement("div");
  246. box.appendChild(icono);
  247. box.onclick = () => {
  248. let modelThumbElement = target;
  249. modelThumbElement.setClass('figura');
  250. modelThumbElement.set({'content': document.getElementById('textoFigura').value});
  251. modal.close();
  252. }
  253. flexfiguras.appendChild(box);
  254. box = document.createElement("div");
  255. box.className = 'gjs-one-bg gjs-four-color-h bloque bloqueGde';
  256. icono = document.createElement("div");
  257. icono.className = 'redondeado';
  258. box.appendChild(icono);
  259. box.onclick = () => {
  260. let modelThumbElement = target;
  261. modelThumbElement.setClass('figura cuadradoRedondeado');
  262. modelThumbElement.set({'content': document.getElementById('textoFigura').value});
  263. modal.close();
  264. }
  265. flexfiguras.appendChild(box);
  266. container.appendChild(flexfiguras);
  267. main.appendChild(container);
  268. modal.setContent(main);
  269. modal.open({
  270. title: "Selector de Figuras",
  271. content: container,
  272. }).getModel().once("change:open", () => editor.stopCommand(this.id));
  273. return this;
  274. },
  275. stop(editor) {
  276. editor.Modal.close();
  277. return this;
  278. }
  279. });
  280. //Crea los bloques en el panel
  281. editor.BlockManager.add('titulo', {
  282. label: `<div>
  283. <div class="gjs-fonts gjs-f-h1p"></div>
  284. <div>Título de Sección</div>
  285. </div>`,
  286. category: 'Institucionales',
  287. content: {
  288. type: 'text',
  289. stylable: false,
  290. name:'Título de Sección',
  291. classes: 'titulo',
  292. content:'Título de la Sección',
  293. },
  294. });
  295. editor.BlockManager.add('parrafo', {
  296. label: `<div>
  297. <div class="fa fa-align-justify fa-3x" style="padding:5px"></div>
  298. <div>Párrafo</div>
  299. </div>`,
  300. category: 'Institucionales',
  301. content: {
  302. type: 'text',
  303. name:'Párrafo',
  304. classes:'parrafo',
  305. stylable: false,
  306. content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vel venenatis sem, at condimentum justo. Proin finibus enim eu elementum molestie. Duis augue quam, molestie nec ornare a, congue eu odio. Nullam convallis, arcu at consectetur egestas, risus nibh vestibulum magna, a molestie libero sapien vitae ante. Maecenas lorem justo, ultricies eu mollis ut, interdum id urna. Nam porta sem et erat dignissim, ultricies porta urna volutpat. Sed pulvinar gravida nisl, ut porta enim ultricies sit amet.',
  307. },
  308. });
  309. editor.BlockManager.add('lista', {
  310. label: `<div>
  311. <div class="fa fa-list fa-3x" style="padding:5px"></div>
  312. <div>Lista</div>
  313. </div>`,
  314. category: 'Institucionales',
  315. content: {
  316. type: 'text',
  317. name:'Elemento',
  318. classes:'lista',
  319. stylable: false,
  320. content: 'Elemento',
  321. },
  322. });
  323. editor.BlockManager.add('espacio', {
  324. label: `<div>
  325. <div class="fa fa-arrows-v fa-3x" style="padding:5px"></div>
  326. <div>Espacio</div>
  327. </div>`,
  328. category: 'Institucionales',
  329. content: {
  330. type: 'default',
  331. name:'Espacio',
  332. classes:'espacio',
  333. stylable: ['height','background-color'],
  334. },
  335. });
  336. editor.BlockManager.add('iconos', {
  337. label: `<div>
  338. <div class="fa fa-wrench fa-3x" style="padding:5px"></div>
  339. <div>Íconos</div>
  340. </div>`,
  341. category: 'Institucionales',
  342. content: {
  343. type: 'iconos',
  344. name:'Ícono',
  345. content:'Sin Icono',
  346. activeOnRender: 1,
  347. },
  348. });
  349. editor.BlockManager.add('figuras', {
  350. label: `<div>
  351. <div class="fa fa-circle-o fa-3x" style="padding:5px"></div>
  352. <div>Figuras</div>
  353. </div>`,
  354. category: 'Institucionales',
  355. content: {
  356. type: 'figuras',
  357. name:'Figura',
  358. content: 'Sin Figura',
  359. activeOnRender: 1,
  360. },
  361. });
  362. if (editor.getHtml() === ''){
  363. reiniciar();
  364. }
  365. //Copia el CSS con el template básico
  366. function reiniciar(){
  367. editor.setComponents(
  368. [
  369. {
  370. type: 'main',
  371. tagName: 'div',
  372. name:'Main',
  373. },
  374. {
  375. type: 'referencias',
  376. tagName: 'div',
  377. name:'Referencias',
  378. }
  379. ]);
  380. }
  381. function cargaDemo(){
  382. /*editor.setStyle(
  383. `.row { display: table; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; width: 100%; }
  384. .cell { width: 8%; vertical-align: top; display: table-cell; height: 75px; }`);*/
  385. editor.setComponents([
  386. {
  387. type: 'main',
  388. tagName: 'main',
  389. name: 'Main',
  390. components: [
  391. {
  392. tagName: 'div',
  393. name: 'Row',
  394. classes: 'row',
  395. components: [
  396. {
  397. tagName: 'div',
  398. name: 'Cell',
  399. classes: 'cell',
  400. components: [
  401. {
  402. type: 'text',
  403. stylable: false,
  404. name:'Título de Sección',
  405. classes: 'titulo',
  406. content:'Introducción',
  407. },
  408. {
  409. type: 'text',
  410. stylable: false,
  411. name:'Párrafo',
  412. classes: 'parrafo',
  413. content:'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vel venenatis sem, at condimentum justo. Proin finibus enim eu elementum molestie. Duis augue quam, molestie nec ornare a, congue eu odio. Nullam convallis, arcu at consectetur egestas, risus nibh vestibulum magna, a molestie libero sapien vitae ante. Maecenas lorem justo, ultricies eu mollis ut, interdum id urna. Nam porta sem et erat dignissim, ultricies porta urna volutpat. Sed pulvinar gravida nisl, ut porta enim ultricies sit amet.',
  414. },
  415. {
  416. type: 'text',
  417. stylable: false,
  418. name:'Párrafo',
  419. classes: 'parrafo',
  420. content:'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vel venenatis sem, at condimentum justo. Proin finibus enim eu elementum molestie. Duis augue quam, molestie nec ornare a, congue eu odio. Nullam convallis, arcu at consectetur egestas, risus nibh vestibulum magna, a molestie libero sapien vitae ante. Maecenas lorem justo, ultricies eu mollis ut, interdum id urna. Nam porta sem et erat dignissim, ultricies porta urna volutpat. Sed pulvinar gravida nisl, ut porta enim ultricies sit amet.',
  421. },
  422. {
  423. type: 'text',
  424. stylable: false,
  425. name:'Título de Sección',
  426. classes: 'titulo',
  427. content:'Metodología Propuesta',
  428. },
  429. {
  430. type: 'text',
  431. stylable: false,
  432. name:'Párrafo',
  433. classes: 'parrafo',
  434. content:'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vel venenatis sem, at condimentum justo. Proin finibus enim eu elementum molestie. Duis augue quam, molestie nec ornare a, congue eu odio. Nullam convallis, arcu at consectetur egestas, risus nibh vestibulum magna, a molestie libero sapien vitae ante. Maecenas lorem justo, ultricies eu mollis ut, interdum id urna. Nam porta sem et erat dignissim, ultricies porta urna volutpat. Sed pulvinar gravida nisl, ut porta enim ultricies sit amet.',
  435. },
  436. {
  437. type: 'image',
  438. name: 'Image',
  439. src: 'img/secciones/editor/imagen.webp',
  440. style:
  441. {
  442. margin: '0 auto 0 auto',
  443. display: 'block',
  444. width: '75%',
  445. },
  446. },
  447. ]
  448. },
  449. {
  450. tagName: 'div',
  451. name: 'Cell',
  452. classes: 'cell',
  453. components: [
  454. {
  455. type: 'text',
  456. stylable: false,
  457. name:'Título de Sección',
  458. classes: 'titulo',
  459. content:'Objetivo',
  460. },
  461. {
  462. type: 'text',
  463. stylable: false,
  464. name:'Elemento',
  465. classes: 'lista',
  466. content:'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis in eros mollis, maximus nunc consequat, lacinia urna. Nullam ac sapien congue, luctus ipsum in, luctus dui. Phasellus iaculis elit non suscipit scelerisque.',
  467. },
  468. {
  469. type: 'text',
  470. stylable: false,
  471. name:'Elemento',
  472. classes: 'lista',
  473. content:'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis in eros mollis, maximus nunc consequat, lacinia urna. Nullam ac sapien congue, luctus ipsum in, luctus dui. Phasellus iaculis elit non suscipit scelerisque. Morbi imperdiet dolor nibh, eu convallis nunc tempor nec. In sagittis sagittis purus et vehicula. Mauris pharetra ultrices lobortis. Nam maximus tellus in ligula iaculis, eu ornare risus feugiat. Integer pharetra, risus quis consectetur mollis, nulla ipsum euismod arcu, sed gravida nibh lacus quis eros.',
  474. },
  475. {
  476. type: 'text',
  477. stylable: false,
  478. name:'Título de Sección',
  479. classes: 'titulo',
  480. content:'Resultados Obtenidos',
  481. },
  482. {
  483. tagName: 'div',
  484. name: 'Row',
  485. classes: 'row',
  486. components: [
  487. {
  488. tagName: 'div',
  489. name: 'Cell',
  490. classes: 'cell',
  491. style:
  492. { width: '75%', },
  493. components: [
  494. {
  495. type: 'text',
  496. stylable: false,
  497. name:'Párrafo',
  498. classes: 'parrafo',
  499. content:'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vel venenatis sem, at condimentum justo. Proin finibus enim eu elementum molestie. Duis augue quam, molestie nec ornare a, congue eu odio. Nullam convallis, arcu at consectetur egestas, risus nibh vestibulum magna, a molestie libero sapien vitae ante. Maecenas lorem justo, ultricies eu mollis ut, interdum id urna. Nam porta sem et erat dignissim, ultricies porta urna volutpat. Sed pulvinar gravida nisl, ut porta enim ultricies sit amet.',
  500. },
  501. ]
  502. },
  503. {
  504. tagName: 'div',
  505. name: 'Cell',
  506. classes: 'cell',
  507. style:
  508. { width: '25%', },
  509. components: [
  510. {
  511. type: 'image',
  512. name: 'Image',
  513. src: 'img/secciones/editor/imagen.webp',
  514. style:
  515. { width: '100%', },
  516. },
  517. {
  518. type: 'image',
  519. name: 'Image',
  520. src: 'img/secciones/editor/imagen.webp',
  521. style:
  522. { width: '100%', },
  523. },
  524. {
  525. type: 'image',
  526. name: 'Image',
  527. src: 'img/secciones/editor/imagen.webp',
  528. style:
  529. { width: '100%', },
  530. },
  531. ]
  532. },
  533. ]
  534. },
  535. {
  536. type: 'text',
  537. stylable: false,
  538. name:'Título de Sección',
  539. classes: 'titulo',
  540. content:'Conclusiones',
  541. },
  542. {
  543. type: 'text',
  544. stylable: false,
  545. name:'Párrafo',
  546. classes: 'parrafo',
  547. content:'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vel venenatis sem, at condimentum justo. Proin finibus enim eu elementum molestie. Duis augue quam, molestie nec ornare a, congue eu odio. Nullam convallis, arcu at consectetur egestas, risus nibh vestibulum magna, a molestie libero sapien vitae ante. Maecenas lorem justo, ultricies eu mollis ut, interdum id urna. Nam porta sem et erat dignissim, ultricies porta urna volutpat. Sed pulvinar gravida nisl, ut porta enim ultricies sit amet.',
  548. }
  549. ]
  550. }
  551. ]
  552. }
  553. ]
  554. },
  555. {
  556. type: 'referencias',
  557. tagName: 'div',
  558. name:'Referencias',
  559. }
  560. ]);
  561. }
  562. /*********** BOTONES **********/
  563. $('#plantilla').click(function(){
  564. $('#modalDemo').modal({backdrop: "static"});
  565. $('.modal-text').children('div.modal-text-bold').text('¿Estás seguro de agregar la plantilla con el ejemplo?');
  566. $('.modal-text').children('div.modal-text-italic').text('Se sobreescribirá el lienzo y se perderá cualquier modificación que hayas realizado.');
  567. $('#okModal').data('id','1');
  568. });
  569. $('#okModal').on('click',function(){
  570. if ($('#okModal').data('id') == '1'){
  571. cargaDemo();
  572. } else {
  573. reiniciar();
  574. }
  575. $('#modalDemo').modal('hide');
  576. });
  577. $('#guardar').click(function(){
  578. var cid = $('#concurso').val();
  579. var etapa = $('#etapa').val();
  580. var pag = 'editor';
  581. var proyecto = $(this).data('id');
  582. var datos = {
  583. tema: $("#tema").text(),
  584. alumnos: $('#alumnos').text(),
  585. css: editor.getCss(),
  586. html: editor.getHtml()
  587. };
  588. $.ajax({
  589. url: 'action/proyecto_action.php',
  590. type: 'POST',
  591. dataType: 'json',
  592. data: { id: cid, etapa: etapa, pag: pag,proyecto: proyecto, datos: JSON.stringify(datos) },
  593. success: function(result) {
  594. if(result['error']!= '' && result['error'] !== undefined){
  595. $('#avisoMsg').text(result['error']);
  596. $('#avisoIcon').removeClass('text-success text-danger ing-autorizar ing-no-cargado').addClass('text-danger ing-no-cargado');
  597. }else{
  598. $('#avisoMsg').text(result['ok']);
  599. $('#avisoIcon').removeClass('text-success text-danger ing-autorizar ing-no-cargado').addClass('text-success ing-autorizar');
  600. }
  601. $('#modalAviso').modal('show');
  602. },
  603. error: function(jqXHR, textStatus, errorThrown ){
  604. $('#avisoMsg').text('No fue posible guardar los cambios');
  605. $('#avisoIcon').removeClass('text-success text-danger ing-autorizar ing-no-cargado').addClass('text-danger ing-no-cargado');
  606. $('#modalAviso').modal('show');
  607. }
  608. });
  609. });