panel.content.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. Ext.ns('VersionX.panel.Common');
  2. VersionX.panel.Common.ContentPanel = function(config) {
  3. config = config || {};
  4. config.id = config.id || Ext.id();
  5. Ext.apply(config,{
  6. items: [{
  7. layout: 'column',
  8. border: false,
  9. items: [{
  10. columnWidth: 1,
  11. layout: 'form',
  12. border: false,
  13. defaults: {
  14. width: '97%'
  15. },
  16. items: [{
  17. xtype: 'panel',
  18. border: false,
  19. style: 'border-bottom: 1px solid black; font-weight: bold;',
  20. html: _('versionx.resources.detail.tabs.resource-content.columnheader', {id:config.vxRecord.version_id}) +
  21. (config.vxRecordCmp ? ' + ' + _('versionx.resources.detail.tabs.resource-content.columnheader', {id:config.vxRecordCmp.version_id}) : '')
  22. },{
  23. xtype: 'panel',
  24. border: false,
  25. style: 'padding: 15px 10px 10px 10px;',
  26. id: config.id + '-diff',
  27. html: (config.vxRecord) ? ((config.vxRecord[config.vxContentField]) ? config.vxRecord[config.vxContentField] : '<em>Empty</em>') : '<em>No Version Chosen</em>'
  28. }]
  29. }]
  30. }]
  31. });
  32. /*
  33. if ( config.vxRecordCmp ) {
  34. config.items[0].items[0].columnWidth = .5;
  35. config.items[0].items.push({
  36. columnWidth: .5,
  37. layout: 'form',
  38. border: false,
  39. defaults: {
  40. width: '97%'
  41. },
  42. items: [{
  43. xtype: 'panel',
  44. border: false,
  45. style: 'border-bottom: 1px solid black; font-weight: bold;',
  46. html: _('versionx.resources.detail.tabs.resource-content.columnheader', {id:config.vxRecordCmp.version_id})
  47. },{
  48. xtype: 'panel',
  49. border: false,
  50. style: 'padding: 15px 10px 10px 10px;',
  51. html: (config.vxRecordCmp) ? ((config.vxRecordCmp[config.vxContentField]) ? config.vxRecordCmp[config.vxContentField] : '<em>Empty</em>') : '<em>No Version Chosen</em>'
  52. }]
  53. });
  54. }*/
  55. VersionX.panel.Common.ContentPanel.superclass.constructor.call(this,config);
  56. this.on('afterrender', this.viewDiff)
  57. };
  58. Ext.extend(VersionX.panel.Common.ContentPanel,MODx.Panel,{
  59. viewDiff: function() {
  60. if ( this.config.vxRecordCmp ) {
  61. var panel = this;
  62. setTimeout(function() {
  63. var current = panel.config.vxRecord[panel.config.vxContentField],
  64. comparedTo = (panel.config.vxRecordCmp[panel.config.vxContentField]) ? panel.config.vxRecordCmp[panel.config.vxContentField] : '';
  65. var diff = JsDiff.diffLines(current, comparedTo),
  66. display = document.getElementById(panel.config.id + '-diff'),
  67. fragment = document.createDocumentFragment();
  68. diff.forEach(function(part){
  69. // green for additions, red for deletions
  70. // grey for common parts
  71. var span = document.createElement('span');
  72. span.className = part.added ? 'vx-added vx-inlinediff-added' : part.removed ? 'red vx-removed vx-inlinediff-removed' : '';
  73. span.innerHTML = part.value;
  74. fragment.appendChild(span);
  75. });
  76. display.innerHTML = '';
  77. display.appendChild(fragment);
  78. }, 100);
  79. }
  80. }
  81. });
  82. Ext.reg('versionx-panel-common-contentpanel',VersionX.panel.Common.ContentPanel);