Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 
 
 

144 рядки
3.9 KiB

  1. // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. // MIT License. See license.txt
  3. wn.provide("wn.tools");
  4. wn.tools.downloadify = function(data, roles, me) {
  5. if(roles && roles.length && !has_common(roles, user_roles)) {
  6. msgprint("Export not allowed. You need " + wn.utils.comma_or(roles)
  7. + " Role to export.");
  8. return;
  9. }
  10. var _get_data = function() { return wn.tools.to_csv(data); };
  11. var flash_disabled = (navigator.mimeTypes["application/x-shockwave-flash"] == undefined);
  12. var download_from_server = function() {
  13. open_url_post("/", {
  14. args: { data: data, filename: me.title },
  15. cmd: "webnotes.utils.datautils.send_csv_to_client"
  16. }, true);
  17. }
  18. // save file > abt 200 kb using server call
  19. if((_get_data().length > 200000) || flash_disabled) {
  20. download_from_server();
  21. } else {
  22. wn.require("assets/webnotes/js/lib/downloadify/downloadify.min.js");
  23. wn.require("assets/webnotes/js/lib/downloadify/swfobject.js");
  24. var id = wn.dom.set_unique_id();
  25. var msgobj = msgprint('<p id="'+ id +'"></p><hr><a id="alternative-download">Alternative download link</a>');
  26. msgobj.$wrapper.find("#alternative-download").on("click", function() { download_from_server(); });
  27. Downloadify.create(id ,{
  28. filename: function(){
  29. return me.title + '.csv';
  30. },
  31. data: _get_data,
  32. swf: 'lib/js/lib/downloadify/downloadify.swf',
  33. downloadImage: 'lib/js/lib/downloadify/download.png',
  34. onComplete: function(){
  35. $(msgobj.msg_area).html("<p>Saved</p>")
  36. },
  37. onCancel: function(){ msgobj.hide(); },
  38. onError: function(){ msgobj.hide(); },
  39. width: 100,
  40. height: 30,
  41. transparent: true,
  42. append: false
  43. });
  44. }
  45. };
  46. wn.markdown = function(txt) {
  47. if(!wn.md2html) {
  48. wn.require('assets/webnotes/js/lib/markdown.js');
  49. wn.md2html = new Showdown.converter();
  50. }
  51. while(txt.substr(0,1)==="\n") {
  52. txt = txt.substr(1);
  53. }
  54. // remove leading tab (if they exist in the first line)
  55. var whitespace_len = 0,
  56. first_line = txt.split("\n")[0];
  57. while([" ", "\n", "\t"].indexOf(first_line.substr(0,1))!== -1) {
  58. whitespace_len++;
  59. first_line = first_line.substr(1);
  60. }
  61. if(whitespace_len && whitespace_len != first_line.length) {
  62. var txt1 = [];
  63. $.each(txt.split("\n"), function(i, t) {
  64. txt1.push(t.substr(whitespace_len));
  65. })
  66. txt = txt1.join("\n");
  67. }
  68. return wn.md2html.makeHtml(txt);
  69. }
  70. wn.tools.to_csv = function(data) {
  71. var res = [];
  72. $.each(data, function(i, row) {
  73. row = $.map(row, function(col) {
  74. return typeof(col)==="string" ? ('"' + col.replace(/"/g, '""') + '"') : col;
  75. });
  76. res.push(row.join(","));
  77. });
  78. return res.join("\n");
  79. };
  80. wn.slickgrid_tools = {
  81. get_view_data: function(columns, dataView, filter) {
  82. var col_row = $.map(columns, function(v) { return v.name; });
  83. var res = [];
  84. var col_map = $.map(columns, function(v) { return v.field; });
  85. for (var i=0, len=dataView.getLength(); i<len; i++) {
  86. var d = dataView.getItem(i);
  87. var row = [];
  88. $.each(col_map, function(i, col) {
  89. var val = d[col];
  90. if(val===null || val===undefined) {
  91. val = "";
  92. }
  93. row.push(val);
  94. });
  95. if(!filter || filter(row, d)) {
  96. res.push(row);
  97. }
  98. }
  99. return [col_row].concat(res);
  100. },
  101. add_property_setter_on_resize: function(grid) {
  102. grid.onColumnsResized.subscribe(function(e, args) {
  103. $.each(grid.getColumns(), function(i, col) {
  104. if(col.docfield && col.previousWidth != col.width &&
  105. !in_list(wn.model.std_fields_list, col.docfield.fieldname) ) {
  106. wn.call({
  107. method:"webnotes.client.make_width_property_setter",
  108. args: {
  109. doclist: [{
  110. doctype:'Property Setter',
  111. doctype_or_field: 'DocField',
  112. doc_type: col.docfield.parent,
  113. field_name: col.docfield.fieldname,
  114. property: 'width',
  115. value: col.width,
  116. "__islocal": 1
  117. }]
  118. }
  119. });
  120. col.previousWidth = col.width;
  121. col.docfield.width = col.width;
  122. }
  123. });
  124. });
  125. }
  126. };