![]() |
Xataface HTML Reports Module 0.1
HTML Reports Module for Xataface
|
00001 //require <xataface/modules/htmlreports/schemabrowser.js> 00002 //require <xataface/modules/htmlreports/RelationshipSelector.js> 00003 //require <ckeditor.js> 00004 //require-css <ckeditor/plugins/insertmacro/insertmacro.css> 00005 00006 00007 00008 00009 (function(){ 00010 var SchemaBrowser = xataface.modules.htmlreports.SchemaBrowser; 00011 var RelationshipSelector = xataface.modules.htmlreports.RelationshipSelector; 00012 00013 var $ = jQuery; 00014 //alert('here'); 00015 //CKEDITOR.config.toolbar_XBasic = [['button-pre', 'Bold', 'Italic', 'Underline', 'InsertMacro']]; 00016 CKEDITOR.config.toolbar_XBasic = $.merge([], CKEDITOR.config.toolbar_Full); 00017 CKEDITOR.config.toolbar_XBasic.push(['InsertMacro', 'setrelationship', 'validatetemplate','addsectionheader','addsectionfooter', 'previewreport', 'previewreporttable']); 00018 //[['button-pre', 'Bold', 'Italic', 'Underline', 'InsertMacro']]; 00019 CKEDITOR.plugins.add('insertmacro', { 00020 init: function(editor){ 00021 00022 00023 00024 00025 var pluginName = 'insertmacro'; 00026 //CKEDITOR.dialog.add(pluginName, this.path + 'dialogs/foo.js'); 00027 00028 00029 editor.addCss('div.xf-htmlreports-section-header{ border: 1px dotted #8cacbb; background-image: url('+XATAFACE_MODULES_HTMLREPORTS_URL+'/images/section_header.png); background-repeat: no-repeat;padding: 10px 0px;}'); 00030 editor.addCss('div.xf-htmlreports-section-footer{ border: 1px dotted #8cacbb; background-image: url('+XATAFACE_MODULES_HTMLREPORTS_URL+'/images/section_footer.png); background-repeat: no-repeat;padding: 10px 0px;}'); 00031 00032 00033 00037 editor.addCommand(pluginName, new CKEDITOR.command(editor, { 00038 00039 exec: function(){ 00040 //alert(editor.element); 00041 var tableName = editor.element.getAttribute('data-xf-htmlreports-tablename'); 00042 00043 XataJax.ready(function(){ 00044 00045 00046 00047 var div = document.createElement('div'); 00048 00049 var sb = new SchemaBrowser({ 00050 query: {'-table': tableName} 00051 }); 00052 sb.bind('fieldClicked', function(event){ 00053 try { 00054 editor.insertText(event.macro); 00055 } catch (e){ 00056 alert('Please select the position in the template where you would like this field to be inserted.'); 00057 } 00058 }); 00059 sb.update(); 00060 00061 $(div).append(sb.getElement()); 00062 //$(div).append(sb.prevButton.getElement()); 00063 //$(div).append(btn); 00064 $('body').append(div); 00065 $(div).dialog({ 00066 title: 'Insert Field', 00067 width: 300, 00068 height: $(window).height(), 00069 position: ['right','top'], 00070 zIndex: 9999 00071 00072 00073 }); 00074 //$('body').append(sb.getElement()); 00075 }); 00076 } 00077 00078 })); 00079 //alert('here'); 00080 editor.ui.addButton('InsertMacro', { 00081 label: 'Insert Field', 00082 command: pluginName 00083 }); 00084 00085 00086 00090 editor.addCommand('setrelationship', new CKEDITOR.command(editor, { 00091 00092 00093 exec: function(){ 00094 //alert(editor.element); 00095 var tableName = editor.element.getAttribute('data-xf-htmlreports-tablename'); 00096 00097 XataJax.ready(function(){ 00098 00099 00100 00101 var div = document.createElement('div'); 00102 00103 var sb = new RelationshipSelector({ 00104 table: tableName 00105 }); 00106 sb.bind('relationshipSelected', function(event){ 00107 var element = editor.getSelection().getStartElement(); 00108 if ( !element ){ 00109 //alert('no element selected..'); 00110 return; 00111 } 00112 var nativeEl = element.$; 00113 00114 // See if there is already a relationship attribute 00115 var existing = $(nativeEl).parents('[relationship]'); 00116 if ( existing.size() >= 1 ){ 00117 //alert(existing.attr('relationship')); 00118 var rel = sb.getSelectedRelationship(); 00119 if ( rel ){ 00120 existing.attr('relationship', rel); 00121 } else { 00122 existing.removeAttr('relationship'); 00123 } 00124 } else { 00125 var container = $(nativeEl).parents('ul,ol,table').first(); 00126 if ( container.size() == 0){ 00127 alert('Please click inside a table or list and try again.'); 00128 return; 00129 } 00130 var rel = sb.getSelectedRelationship(); 00131 if ( rel ){ 00132 container.attr('relationship', rel); 00133 } else { 00134 container.removeAttr('relationship'); 00135 } 00136 00137 } 00138 00139 00140 00141 }); 00142 sb.update(); 00143 00144 $(div).append(sb.getElement()); 00145 //$(div).append(sb.prevButton.getElement()); 00146 //$(div).append(btn); 00147 $('body').append(div); 00148 $(div).dialog({ 00149 title: 'Select Relationship for Portal', 00150 width: 300, 00151 height: 150, 00152 zIndex: 9999, 00153 modal: true 00154 00155 00156 }); 00157 00158 00159 sb.bind('loaded', function(event){ 00160 var element = editor.getSelection().getStartElement(); 00161 if ( !element ){ 00162 alert('no element selected..'); 00163 $(div).dialog('close'); 00164 return; 00165 } 00166 var nativeEl = element.$; 00167 00168 // See if there is already a relationship attribute 00169 var existing = $(nativeEl).parents('[relationship]'); 00170 if ( existing.size() >= 1 ){ 00171 //alert(existing.attr('relationship')); 00172 sb.setSelectedRelationship(existing.attr('relationship')); 00173 } 00174 }); 00175 //alert(existing.size()); 00176 //$('body').append(sb.getElement()); 00177 }); 00178 00179 } 00180 })); 00181 00182 editor.ui.addButton('setrelationship', { 00183 label: 'Set Relationship', 00184 command: 'setrelationship' 00185 }); 00186 00187 00191 editor.addCommand('validatetemplate', new CKEDITOR.command(editor, { 00192 00193 00194 exec: function(){ 00195 //alert(editor.element); 00196 var tableName = editor.element.getAttribute('data-xf-htmlreports-tablename'); 00197 00198 var data = editor.getData(); 00199 00200 var q = { 00201 '-table': tableName, 00202 '--template': data, 00203 00204 '-action': 'htmlreports_validate_template' 00205 }; 00206 $.post(DATAFACE_SITE_HREF, q, function(response){ 00207 00208 try { 00209 if ( response.message){ 00210 alert(response.message); 00211 } else { 00212 alert('Unspecified server error. See error log for details.'); 00213 } 00214 00215 } catch (e){ 00216 alert(e); 00217 } 00218 }); 00219 00220 00221 } 00222 })); 00223 00224 editor.ui.addButton('validatetemplate', { 00225 label: 'Validate Template', 00226 command: 'validatetemplate' 00227 }); 00228 00229 00233 editor.addCommand('addsectionheader', new CKEDITOR.command(editor, { 00234 00235 00236 exec: function(){ 00237 //alert(editor.element); 00238 var tableName = editor.element.getAttribute('data-xf-htmlreports-tablename'); 00239 00240 var rootEl = editor.document.$; 00241 00242 // First let's see if there is an existing header 00243 00244 00245 var existing = $('div.xf-htmlreports-section-header', rootEl); 00246 var htmlToAdd = '<div class="xf-htmlreports-section-header"></div>'; 00247 if ( existing.size() > 0 ){ 00248 var last = existing.get(existing.size()-1); 00249 var el = new CKEDITOR.dom.element(last); 00250 var range = new CKEDITOR.dom.range(editor.document); 00251 range.setStartAfter(el); 00252 range.setEndAfter(el); 00253 editor.getSelection().selectRanges([range]); 00254 editor.insertHtml(htmlToAdd); 00255 00256 } else { 00257 var range = new CKEDITOR.dom.range(editor.document); 00258 range.setStart(editor.document, 0); 00259 range.setEnd(editor.document, 0); 00260 editor.getSelection().selectRanges([range]); 00261 editor.insertHtml(htmlToAdd); 00262 } 00263 00264 editor.updateElement(); 00265 } 00266 })); 00267 00268 00269 00270 editor.ui.addButton('addsectionheader', { 00271 label: 'Add Section Header', 00272 command: 'addsectionheader' 00273 }); 00274 00275 00279 editor.addCommand('addsectionfooter', new CKEDITOR.command(editor, { 00280 00281 00282 exec: function(){ 00283 //alert(editor.element); 00284 var tableName = editor.element.getAttribute('data-xf-htmlreports-tablename'); 00285 00286 var rootEl = editor.document.$; 00287 00288 // First let's see if there is an existing header 00289 00290 00291 var existing = $('div.xf-htmlreports-section-footer', rootEl); 00292 var htmlToAdd = '<div class="xf-htmlreports-section-footer"></div>'; 00293 if ( existing.size() > 0 ){ 00294 var last = existing.get(0); 00295 //var prev = $(last).prev(); 00296 //if ( prev.size() > 0 ) last = prev.get(0); 00297 00298 var el = new CKEDITOR.dom.element(last); 00299 var range = new CKEDITOR.dom.range(editor.document); 00300 el.insertBeforeMe(new CKEDITOR.dom.element($(htmlToAdd).get(0))); 00301 /* 00302 range.setStartAfter(el); 00303 range.setEndAfter(el); 00304 editor.getSelection().selectRanges([range]); 00305 editor.insertHtml(htmlToAdd); 00306 */ 00307 00308 } else { 00309 //alert($(editor.document.getBody().$).html()); 00310 editor.document.getBody().appendHtml(htmlToAdd); 00311 00312 //editor.document.getDocumentElement().insertAfterMe(new CKEDITOR.dom.element($(htmlToAdd).get(0))); 00313 /* 00314 var range = new CKEDITOR.dom.range(editor.document); 00315 00316 range.setStartAfter(editor.document.getDocumentElement()); 00317 range.setEndAfter(editor.document.getDocumentElement()); 00318 editor.getSelection().selectRanges([range]); 00319 editor.insertHtml(htmlToAdd);*/ 00320 } 00321 editor.updateElement(); 00322 00323 00324 } 00325 })); 00326 00327 editor.ui.addButton('addsectionfooter', { 00328 label: 'Add Section Footer', 00329 command: 'addsectionfooter' 00330 }); 00331 00332 00333 00337 editor.addCommand('previewreport', new CKEDITOR.command(editor, { 00338 00339 00340 exec: function(){ 00341 //alert(editor.element); 00342 var tableName = editor.element.getAttribute('data-xf-htmlreports-tablename'); 00343 00344 var form = $('<form>') 00345 .attr('method','post') 00346 .attr('target','_blank') 00347 .attr('action', DATAFACE_SITE_HREF) 00348 .append( 00349 $('<input/>') 00350 .attr('type', 'hidden') 00351 .attr('name', '-action') 00352 .attr('value', 'htmlreports_preview_report') 00353 ) 00354 .append( 00355 $('<input/>') 00356 .attr('type', 'hidden') 00357 .attr('name', '-table') 00358 .attr('value', tableName) 00359 ) 00360 .append( 00361 $('<input/>') 00362 .attr('type', 'hidden') 00363 .attr('name', '--template') 00364 .attr('value', editor.getData()) 00365 00366 .append( 00367 $('<input/>') 00368 .attr('type', 'hidden') 00369 .attr('name', '--css') 00370 .attr('value', editor.element.getAttribute('data-xf-htmlreports-css')) 00371 ) 00372 ); 00373 $('body').append(form); 00374 form.submit(); 00375 /* 00376 var q = { 00377 '-action': 'htmlreports_preview_report', 00378 '-table': tableName, 00379 '--template': editor.getData() 00380 }; 00381 00382 $.post(DATAFACE_SITE_HREF, q, function(response){ 00383 00384 var div = document.createElement('div'); 00385 $(div).html(response); 00386 $('body').append(div); 00387 $(div).dialog({ 00388 title: 'Report Preview', 00389 width: $(window).width()-40, 00390 height: $(window).height()-40, 00391 zIndex: 9999 00392 }); 00393 00394 00395 00396 00397 00398 }); 00399 */ 00400 00401 } 00402 })); 00403 00404 editor.ui.addButton('previewreport', { 00405 label: 'Preview Report', 00406 command: 'previewreport' 00407 }); 00408 00409 00413 editor.addCommand('previewreporttable', new CKEDITOR.command(editor, { 00414 00415 00416 exec: function(){ 00417 //alert(editor.element); 00418 00419 var tableName = editor.element.getAttribute('data-xf-htmlreports-tablename'); 00420 00421 00422 var form = $('<form>') 00423 .attr('method','post') 00424 .attr('target','_blank') 00425 .attr('action', DATAFACE_SITE_HREF) 00426 .append( 00427 $('<input/>') 00428 .attr('type', 'hidden') 00429 .attr('name', '-action') 00430 .attr('value', 'htmlreports_preview_report') 00431 ) 00432 .append( 00433 $('<input/>') 00434 .attr('type', 'hidden') 00435 .attr('name', '-table') 00436 .attr('value', tableName) 00437 ) 00438 .append( 00439 $('<input/>') 00440 .attr('type', 'hidden') 00441 .attr('name', '--template') 00442 .attr('value', editor.getData()) 00443 00444 ) 00445 .append( 00446 $('<input/>') 00447 .attr('type', 'hidden') 00448 .attr('name', '--css') 00449 .attr('value', editor.element.getAttribute('data-xf-htmlreports-css')) 00450 ) 00451 .append( 00452 $('<input/>') 00453 .attr('type', 'hidden') 00454 .attr('name', '--view') 00455 .attr('value', 'table') 00456 ) 00457 ; 00458 $('body').append(form); 00459 form.submit(); 00460 /* 00461 var q = { 00462 '-action': 'htmlreports_preview_report', 00463 '-table': tableName, 00464 '--template': editor.getData() 00465 }; 00466 00467 $.post(DATAFACE_SITE_HREF, q, function(response){ 00468 00469 var div = document.createElement('div'); 00470 $(div).html(response); 00471 $('body').append(div); 00472 $(div).dialog({ 00473 title: 'Report Preview', 00474 width: $(window).width()-40, 00475 height: $(window).height()-40, 00476 zIndex: 9999 00477 }); 00478 00479 00480 00481 00482 00483 }); 00484 */ 00485 00486 } 00487 })); 00488 00489 editor.ui.addButton('previewreporttable', { 00490 label: 'Preview Report as Table', 00491 command: 'previewreporttable' 00492 }); 00493 00494 } 00495 00496 }); 00497 00498 00499 00500 })();