dyndoc-ruby-core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. checksums.yaml +7 -0
  2. data/dyndoc/.DS_Store +0 -0
  3. data/dyndoc/Dyn/.postload +1 -0
  4. data/dyndoc/Dyn/.preload +1 -0
  5. data/dyndoc/Dyn/After.dyn +3 -0
  6. data/dyndoc/Dyn/Base.dyn +18 -0
  7. data/dyndoc/Dyn/Minimum.dyn +20 -0
  8. data/dyndoc/Model/Html/DefaultPost_html.dyn +5 -0
  9. data/dyndoc/Model/Html/DefaultPre_html.dyn +15 -0
  10. data/dyndoc/Model/Odt/DefaultPost_content.xml +3 -0
  11. data/dyndoc/Model/Odt/DefaultPost_tmpl_content.xml +3 -0
  12. data/dyndoc/Model/Odt/DefaultPre_content.xml +8 -0
  13. data/dyndoc/Model/Odt/DefaultPre_tmpl_content.xml +8 -0
  14. data/dyndoc/Model/Tex/ContentPost_tmpl.tex +1 -0
  15. data/dyndoc/Model/Tex/ContentPre_tmpl.tex +6 -0
  16. data/dyndoc/Model/Tex/DefaultPost_tmpl.tex +73 -0
  17. data/dyndoc/Model/Tex/DefaultPre_tmpl.tex +16 -0
  18. data/dyndoc/Model/Ttm/DefaultPost_tmpl.ttm +3 -0
  19. data/dyndoc/Model/Ttm/DefaultPre_tmpl.ttm +16 -0
  20. data/dyndoc/Std/Array.dyn +96 -0
  21. data/dyndoc/Std/Composer.dyn +38 -0
  22. data/dyndoc/Std/DevTag.dyn +101 -0
  23. data/dyndoc/Std/DynVar.dyn +23 -0
  24. data/dyndoc/Std/File.dyn +55 -0
  25. data/dyndoc/Std/Git.dyn +34 -0
  26. data/dyndoc/Std/List.dyn +46 -0
  27. data/dyndoc/Std/OOP.dyn +32 -0
  28. data/dyndoc/Std/Signal.dyn +18 -0
  29. data/dyndoc/Std/String.dyn +22 -0
  30. data/dyndoc/Std/Styles.dyn +1 -0
  31. data/dyndoc/Std/Test.dyn +282 -0
  32. data/dyndoc/Std/Utils.dyn +42 -0
  33. data/dyndoc/Std/Verb.dyn +5 -0
  34. data/dyndoc/Style/Notation/Math.dyn +7 -0
  35. data/dyndoc/Style/Notation/Stat/Classic.dyn +8 -0
  36. data/dyndoc/Style/Notation/Stat/Cqls.dyn +44 -0
  37. data/dyndoc/Style/Text/Std.dyn +5 -0
  38. data/dyndoc/Style/Text/StdAlias.dyn +3 -0
  39. data/dyndoc/Style/Text/StdTex.dyn +17 -0
  40. data/dyndoc/Style/Text/Txt.dyn +1 -0
  41. data/dyndoc/Tex/.postload +1 -0
  42. data/dyndoc/Tex/.preload +1 -0
  43. data/dyndoc/Tex/10pt_tmpl.tex +1 -0
  44. data/dyndoc/Tex/11pt_tmpl.tex +1 -0
  45. data/dyndoc/Tex/12pt_tmpl.tex +1 -0
  46. data/dyndoc/Tex/Article_tmpl.tex +1 -0
  47. data/dyndoc/Tex/Beamer.dyn_tex +35 -0
  48. data/dyndoc/Tex/BeamerHandout_tmpl.tex +2 -0
  49. data/dyndoc/Tex/Book_tmpl.tex +1 -0
  50. data/dyndoc/Tex/DefaultFirst_tmpl.tex +1 -0
  51. data/dyndoc/Tex/DefaultLast_tmpl.tex +8 -0
  52. data/dyndoc/Tex/Default_tmpl.tex +9 -0
  53. data/dyndoc/Tex/First_tmpl.tex +8 -0
  54. data/dyndoc/Tex/Fr_tmpl.tex +17 -0
  55. data/dyndoc/Tex/Header_tmpl.tex +3 -0
  56. data/dyndoc/Tex/InclGraph_tmpl.tex +19 -0
  57. data/dyndoc/Tex/InclSpatProc_tmpl.tex +70 -0
  58. data/dyndoc/Tex/InclSumMI_tmpl.tex +4 -0
  59. data/dyndoc/Tex/LargeA4_tmpl.tex +5 -0
  60. data/dyndoc/Tex/Last_tmpl.tex +1 -0
  61. data/dyndoc/Tex/Option_tmpl.tex +8 -0
  62. data/dyndoc/Tex/Png_tmpl.tex +1 -0
  63. data/dyndoc/Tex/RefCite2_tmpl.tex +16 -0
  64. data/dyndoc/Tex/RefCite_tmpl.tex +16 -0
  65. data/dyndoc/Tex/Report_tmpl.tex +1 -0
  66. data/dyndoc/Tex/Theorem_tmpl.tex +14 -0
  67. data/dyndoc/Tools/.DS_Store +0 -0
  68. data/dyndoc/Tools/Atom.dyn/index.dyn +42 -0
  69. data/dyndoc/Tools/AtomDyndocker.dyn/index.dyn +43 -0
  70. data/dyndoc/Tools/R/Fig.dyn +144 -0
  71. data/dyndoc/Tools/R/Tools.dyn +344 -0
  72. data/dyndoc/Tools/Tex/Beamer.dyn +204 -0
  73. data/dyndoc/Tools/Tex/BeamerSlide.dyn_tex +199 -0
  74. data/dyndoc/Tools/Tex/Pgf.dyn +115 -0
  75. data/dyndoc/Tools/Tex/Table.dyn +278 -0
  76. data/dyndoc/Tools/Tex/Tools.dyn +37 -0
  77. data/dyndoc/Tools/Tex/Verb.dyn +77 -0
  78. data/dyndoc/Tools/Web/.DS_Store +0 -0
  79. data/dyndoc/Tools/Web/Ace.dyn +54 -0
  80. data/dyndoc/Tools/Web/Code.dyn +129 -0
  81. data/dyndoc/Tools/Web/DHtmlX.dyn +39 -0
  82. data/dyndoc/Tools/Web/DataTable.dyn_html +354 -0
  83. data/dyndoc/Tools/Web/Html.dyn +286 -0
  84. data/dyndoc/Tools/Web/Html/JQuery.dyn +123 -0
  85. data/dyndoc/Tools/Web/Html/Styles.dyn +4 -0
  86. data/dyndoc/Tools/Web/JQueryTools.dyn +87 -0
  87. data/dyndoc/Tools/Web/Layout.dyn +86 -0
  88. data/dyndoc/Tools/Web/Layout/CQLS.dyn +6 -0
  89. data/dyndoc/Tools/Web/Layout/LJK.dyn +41 -0
  90. data/dyndoc/Tools/Web/TabBar.dyn +37 -0
  91. data/dyndoc/Tools/Web/Ttm.dyn +20 -0
  92. data/dyndoc/Tools/Web/Txtl.dyn +14 -0
  93. data/lib/dyndoc-core.rb +59 -0
  94. data/lib/dyndoc/base/envir.rb +541 -0
  95. data/lib/dyndoc/base/filter/call.rb +127 -0
  96. data/lib/dyndoc/base/filter/filter_mngr.rb +637 -0
  97. data/lib/dyndoc/base/filter/server.rb +882 -0
  98. data/lib/dyndoc/base/filters.rb +3 -0
  99. data/lib/dyndoc/base/helpers.rb +9 -0
  100. data/lib/dyndoc/base/helpers/core.rb +32 -0
  101. data/lib/dyndoc/base/helpers/parser.rb +188 -0
  102. data/lib/dyndoc/base/scanner.rb +886 -0
  103. data/lib/dyndoc/base/tags.rb +4 -0
  104. data/lib/dyndoc/base/tags/keys_mngr.rb +401 -0
  105. data/lib/dyndoc/base/tags/part_tag.rb +194 -0
  106. data/lib/dyndoc/base/tags/tag_mngr.rb +125 -0
  107. data/lib/dyndoc/base/tags/user_tag.rb +216 -0
  108. data/lib/dyndoc/base/tmpl.rb +6 -0
  109. data/lib/dyndoc/base/tmpl/eval.rb +581 -0
  110. data/lib/dyndoc/base/tmpl/extension.rb +337 -0
  111. data/lib/dyndoc/base/tmpl/manager.rb +450 -0
  112. data/lib/dyndoc/base/tmpl/oop.rb +57 -0
  113. data/lib/dyndoc/base/tmpl/parse_do.rb +2446 -0
  114. data/lib/dyndoc/base/tmpl/rbenvir.rb +54 -0
  115. data/lib/dyndoc/base/utils.rb +367 -0
  116. data/lib/dyndoc/common/dynArray.rb +234 -0
  117. data/lib/dyndoc/common/file.rb +52 -0
  118. data/lib/dyndoc/common/init.rb +2 -0
  119. data/lib/dyndoc/common/tilt.rb +149 -0
  120. data/lib/dyndoc/common/utils.rb +61 -0
  121. data/lib/dyndoc/common/uv.rb +163 -0
  122. data/lib/dyndoc/init/config.rb +296 -0
  123. data/lib/dyndoc/init/home.rb +9 -0
  124. data/lib/dyndoc/plugins/tex.rb +4 -0
  125. data/lib/dyndoc/plugins/tex/beamer.rb +208 -0
  126. data/lib/dyndoc/plugins/tex/tex_eval.rb +69 -0
  127. data/lib/dyndoc/plugins/tex/tex_parse_do.rb +25 -0
  128. data/lib/dyndoc/plugins/tex/tex_user_tag.rb +32 -0
  129. data/share/R/dyndocMsys2.R +5 -0
  130. data/share/R/dyndocTools.R +9 -0
  131. data/share/R/test.R +14 -0
  132. data/share/R/tools/dynArray.R +34 -0
  133. data/share/R/tools/dynCapture.R +84 -0
  134. data/share/R/tools/dynMsys2.R +54 -0
  135. data/share/julia/dynArray.jl +93 -0
  136. data/share/julia/dyndoc.jl +110 -0
  137. data/share/julia/ruby.jl +37 -0
  138. metadata +202 -0
@@ -0,0 +1,129 @@
1
+ {#meth]new.CodeEdit[#,]lang[dyn][#,]key[][#,]rows[15][#,]cols[90][#,]first[init,js]
2
+ [#=].key[{#if]#{+?key}[#>]#{key}[#else]{#objname]self[#}[#if}]
3
+ [#=].textarea[<<rows[#{rows}]<<cols[#{cols}]]
4
+ [#=].lang[{#case]#{lang}[#when]r,R[#>]R[#when]dyn,dyndoc[#>]dyndoc[#case}]
5
+ [#>]{#case]#{first}
6
+ [#when]init[#>]{#init]self[#}
7
+ [#when]js[#>]{#js]self[#}
8
+ [#when]result[#>]{#result]self[#}
9
+ [#case}
10
+ [#}
11
+
12
+ {#meth]init.CodeEdit[#,]initial[Dyndoc code!][#,]style[float:center]
13
+ [#>]<div id="#{.key}-input" style="#{style}">#{initial}</div>
14
+ <div id="#{.key}-rawcode"></div>
15
+ <div id="#{.key}-uvcode"></div>
16
+ [#meth}
17
+
18
+ {#meth]result.CodeEdit[#>]<div id="#{.key}-result">Dyndoc code!</div>[#meth}
19
+
20
+ {#meth]js.CodeEdit[#>]
21
+ <script type="text/javascript">
22
+ //these divs are used to fetch different contents with taconite!
23
+ $('##{.key}-rawcode').hide();
24
+ $('##{.key}-uvcode').hide();
25
+ //the delegate function!
26
+ var mydeleg= {
27
+ willOpenEditInPlace: function(dom,b) {
28
+ return $('##{.key}-rawcode').text();
29
+ }
30
+ };
31
+ //In place editor for code!
32
+ $("##{.key}-input").editInPlace({
33
+ //callback: function(unused, enteredText) { },
34
+ success: function(html) {
35
+ $.taconite(html);
36
+ $('##{.key}-result').html($('##{.key}-result').text());
37
+ $('##{.key}-input').html($('##{.key}-uvcode').html());
38
+ },
39
+ url: "/play/#{.lang}",
40
+ params: "id=#{.key}",
41
+ bg_over: "#cff",
42
+ field_type: "textarea",
43
+ textarea_rows: "#{.textarea.rows}",
44
+ textarea_cols: "#{.textarea.cols}",
45
+ // saving_image: "./images/ajax-loader.gif"
46
+ save_if_nothing_changed: true,
47
+ delegate: mydeleg
48
+ });
49
+ </script>
50
+ [#meth}
51
+
52
+ {#meth]new.CodeDemoChooser[#,]edit[][#,]key[][#,]first[init]
53
+ [#=].key[{#if]#{+?key}[#>]#{key}[#else]{#objname]self[#}[#if}]
54
+ [#=].edit[:edit]
55
+ [#rb<]puts "titoto";p #{=.edit.lang}
56
+ [#>]{#case]#{first}
57
+ [#when]init[#>]{#init]self[#}
58
+ [#when]js[#>]{#js]self[#}
59
+ [#case}
60
+ [#}
61
+
62
+ {#meth]init.CodeDemoChooser[#>]<select id="#{.key}-chooser">
63
+ [#rb>]$demo_dyndoc_codes_for_site[#{=.edit.lang}].keys.sort.map{|k| "<option>"+k+"</option>"}.join("\n")[#>]
64
+ </select>
65
+ [#meth}
66
+
67
+ {#meth]js.CodeDemoChooser[#>]
68
+ <script type="text/javascript">
69
+ //function to select example!
70
+ function #{.key}_selectChoice() {
71
+ //alert(value);
72
+ var choice=$("##{.key}-chooser").val()
73
+ $.post( "/demo/#{.edit.lang}_choices",
74
+ "update_value="+choice+"&style=amy&id=#{.edit.key}",
75
+ function(html){
76
+ //alert("taco:"+html);
77
+ $.taconite(html);
78
+ $('##{.edit.key}-result').html($('##{.edit.key}-result').text());
79
+ $('##{.edit.key}-input').html($('##{.edit.key}-uvcode').html());
80
+ }
81
+ );
82
+ };
83
+ //First initialization!!!
84
+ #{.key}_selectChoice();
85
+ //bind selection!
86
+ $("##{.key}-chooser").change(#{.key}_selectChoice);
87
+ </script>
88
+ [#meth}
89
+
90
+
91
+ {#new]FileUploader[#of]HtmlLoader[#code]
92
+ [<link href="/stylesheets/fileuploader.css" rel="stylesheet" type="text/css"/>
93
+ <script src="/javascripts/fileuploader.js" type="text/javascript"></script>]
94
+ [#new}
95
+
96
+
97
+ {#meth]new.FileUploader[#,]id[][#,].action[/upload][#,]first[init,js]
98
+ [#=].id[{#if]#{+?id}[#>]#{id}[#else]{#objname]self[#}[#if}]
99
+ [#>]{#case]#{first}
100
+ [#when]init[#>]{#init]self[#}
101
+ [#when]js[#>]{#js]self[#}
102
+ [#case}
103
+ [#meth}
104
+
105
+
106
+ {#meth]init.FileUploader[#>]
107
+ <div id="file-uploader-#{.id}">
108
+ <noscript>
109
+ <p>Please enable JavaScript to use file uploader.</p>
110
+ <!-- or put a simple form for upload here -->
111
+ </noscript>
112
+ </div>
113
+ [#meth}
114
+
115
+ {#meth]js.FileUploader[#>]
116
+ <script>
117
+ function createUploader_#{.id}(){
118
+ var uploader = new qq.FileUploader({
119
+ element: document.getElementById('file-uploader-#{.id}'),
120
+ action: '#{.action}',
121
+ debug: false
122
+ });
123
+ }
124
+
125
+ // in your app create uploader as soon as the DOM is ready
126
+ // don't wait for the window to load
127
+ window.onload = createUploader_#{.id};
128
+ </script>
129
+ [#meth}
@@ -0,0 +1,39 @@
1
+
2
+ {#def]csvView[#,]filename[][#,]key[]
3
+ [#,]header[]
4
+ [#,]size[<<width[250px]<<height[250px]]
5
+ [#,]col[<<widths[]<<align[]<<types[]<<sorting[]]
6
+ [#?]#{0?key}[#rb>]key[File.basename(#{=filename},".*")][#?]end
7
+ [#>]
8
+ <button style="border: #707070 1px solid; cursor: pointer;" onclick="saveCSV('#{filename}');">Save</button>
9
+ <div id="#{key}" style="width:#{size.width}; height:#{size.height}; background-color:white;"></div>
10
+ <script>
11
+ mygrid = new dhtmlXGridObject('#{key}');
12
+ [#?]#{+?header}[#>]mygrid.setHeader("#{header}");
13
+ [#?]#{+?col.widths}[#>]mygrid.setInitWidths("#{col.widths}");
14
+ [#?]#{+?col.types}[#>]mygrid.setColTypes("#{col.types}");
15
+ [#?]#{+?col.align}[#>]mygrid.setColAlign("#{col.align}");
16
+ [#?]#{+?col.sorting}[#>]mygrid.setColSorting("#{col.sorting}");
17
+ [#?]end[#>]
18
+ //mygrid.setInitWidths("100,150,*");
19
+ //mygrid.setColAlign("right,left,left,left");
20
+ //mygrid.setColTypes("ro,ed,ed");
21
+ //mygrid.setColSorting("int,str,str");
22
+ mygrid.enableCSVHeader(true);
23
+ mygrid.setCSVDelimiter(';');
24
+ mygrid.init();
25
+ //mygrid.load("#{filename}?state="+Date.now(),"csv");
26
+ mygrid.loadCSVFile("#{filename}?state="+Date.now());
27
+ function saveCSV(filename) {
28
+ var data=mygrid.serializeToCSV();
29
+ $.post("/rsrc/save",
30
+ {content: data, filename: filename},
31
+ function(res) {
32
+ if(res=="false") {
33
+ alert("Error in saving!!!");
34
+ }
35
+ },
36
+ "text")
37
+ }
38
+ </script>
39
+ [#def}
@@ -0,0 +1,354 @@
1
+ [#<] {#require4html]JQueryDataTable[#}
2
+ {#meth]new.CSVDataTable[#,].filename[][#,]vars[][#,].tableId[{#objname]self[#}CsvDataTable][#,].csvMode[rsrc][#,].colSep[;][#,].server[]
3
+ [#=].varnames@[][#rb<]puts "CSVVVVVV";p #{=vars}; <.varnames@> = #{=vars}.strip.split(",")
4
+ <.filename:>.strip!
5
+ [#}
6
+ {#meth]css.CSVDataTable[#>]
7
+ <link rel="stylesheet" href="#{.server}/tools/DataTables/css/jquery.dataTables_themeroller.css" type="text/css"/>
8
+ <link rel="stylesheet" href="#{.server}/tools/DataTables/editable/css/themes/smoothness/jquery-ui-1.7.2.custom.css" type="text/css"/>
9
+ <link rel="stylesheet" href="#{.server}/tools/DataTables/extras/ColVis/css/ColVis.css" type="text/css"/>
10
+ [#}
11
+
12
+ {#meth]js.CSVDataTable[#,]columnDefs[][#,]displayLength[10][#,]lengthMenu[5,10,15][#,]jQueryUI[false][#,]editable[][#,]sorting[[0,'asc']]
13
+ [#?]#{+?editable} and "#{editable}"=="true"
14
+ [#=]editable[{
15
+ sUpdateURL: "#{.server}/rsrc/datatable/csv_updatecell",
16
+ oUpdateParameters : {csv: "#{.filename}", csv_mode: "#{.csvMode}", col_sep: "#{.colSep}" }
17
+ }]
18
+ [#?]end
19
+ [#>]
20
+ <script type="text/javascript" charset="utf-8">
21
+ $(document).ready(function() {
22
+ $("table##{.tableId}").dataTable( {
23
+ "fnServerData": function ( sUrl, aoData, fnCallback, oSettings ) {
24
+ oSettings.jqXHR = $.ajax( {
25
+ "url": sUrl,
26
+ "data": aoData,
27
+ "success": function (json,status) {
28
+ if ( json.sError ) {
29
+ oSettings.oApi._fnLog( oSettings, 0, json.sError );
30
+ }
31
+
32
+ $(oSettings.oInstance).trigger('xhr', [oSettings, json]);
33
+ fnCallback( json );
34
+ },
35
+ "complete": function(resp){
36
+ var header = resp.getAllResponseHeaders();
37
+ //console.log(header);
38
+ },
39
+ "async": false,
40
+ "dataType": "jsonp",
41
+ "cache": false,
42
+ "type": oSettings.sServerMethod,
43
+ //"crossDomain": true,
44
+ "error": function (xhr, error, thrown) {
45
+ console.log(error+":"+xhr);
46
+ if ( error == "parsererror" ) {
47
+ console.log(error+":"+xhr);
48
+ oSettings.oApi._fnLog( oSettings, 0, "DataTables warning: JSON data from "+
49
+ "server could not be parsed. This is caused by a JSON formatting error." );
50
+ }
51
+ }
52
+ } );
53
+ },
54
+ "sDom": 'C<"clear"><"H"lr>t<"F"ip>', //no search
55
+ "bJQueryUI": #{jQueryUI} ,
56
+ "aLengthMenu": [#{lengthMenu}],
57
+ "iDisplayLength": #{displayLength},
58
+ "aaSorting": [#{sorting}],
59
+ /*"sPaginationType": "full_numbers",*/
60
+ /*"sScrollY": "400px",
61
+ "bPaginate": false,*/
62
+ "bFilter": false,
63
+ /*"bStateSave": true,*/
64
+ "bProcessing": true,
65
+ "bServerSide": true,
66
+ "sAjaxSource": "#{.server}/rsrc/datatable/csv",
67
+ "fnServerParams": function ( aoData ) {
68
+ aoData.push( { "name": "csv" , "value": "#{.filename}"} );
69
+ aoData.push( { "name": "csv_mode" , "value": "#{.csvMode}"} );
70
+ aoData.push( { "name": "varnames" , "value": "#{.varnames@}"} );
71
+ aoData.push( { "name": "col_sep" , "value": "#{.colSep}"} );
72
+ }{#if]#{+?columnDefs}[#>][,
73
+ "aoColumnDefs": [
74
+ #{columnDefs}
75
+ ]
76
+ ][#if}
77
+ } ){#if]#{+?editable}[#>].makeEditable(#{editable})[#if};
78
+ } );
79
+ </script>
80
+ [#}
81
+
82
+ {#meth]html.CSVDataTable[#,]width[][#>]
83
+ <table id="#{.tableId}"{#if]#{+?width}[#>] width="#{width}"[#}>
84
+ <thead>
85
+ <tr>
86
+ [#rb>](0...(<.varnames@>.length)).each {|i| #
87
+ varname = <.varnames@>[i]
88
+ {#>]<th>:{varname}</th>[#\n][#}
89
+ }
90
+ [#>]
91
+ </tr>
92
+ </thead>
93
+ <tbody>
94
+ <tr>
95
+ <td colspan="5" class="dataTables_empty">Loading data from server</td>
96
+ </tr>
97
+ </tbody>
98
+ </table>
99
+ [#}
100
+
101
+ {#meth]new.CSVAddForm[#,].filename[][#,]vars[][#,].csvdatatableId[]
102
+ [#,].formId[{#objname]self[#}MyForm][#,].relId[{#objname]self[#}Rel]
103
+ [#,].triggerMode[button]
104
+ [#,].overlay[basic]
105
+ [#,].server[]
106
+ [#=].varnames@[][#rb<]<.varnames@> = #{=vars}.strip.split(",");<.filename:>.strip!
107
+ [#?]#{0?.csvdatatableId}
108
+ [#rb<]tmp="{#objname]self[#}"
109
+ <.csvdatatableId:>=tmp[0...-3]+"CsvDataTable" if tmp =~ /Add$/
110
+ [#}
111
+
112
+ {#meth]css.CSVAddForm[#,]server[]
113
+ [#>]
114
+ <link rel="stylesheet" href="#{.server}/tools/jqueryTools/css/overlay-#{.overlay}.css" type="text/css"/>
115
+ <style>
116
+
117
+ /* the form */
118
+ ##{.formId} {
119
+ background-color:#777;
120
+ background-color:rgba(0, 0, 0, 0.55);
121
+ /*padding:15px;
122
+ padding-bottom:10px;
123
+ margin:5px 0 0 73px;*/
124
+ }
125
+
126
+ ##{.formId} p {
127
+ clear:left;
128
+ }
129
+
130
+ ##{.formId} fieldset {
131
+ float:left;
132
+ text-align: left;
133
+ /*margin-left:15px;
134
+ padding:0;*/
135
+ border:0;
136
+ width:80%;
137
+ clear:left;
138
+ }
139
+
140
+ .last {
141
+ margin-right:0;
142
+ }
143
+
144
+ /* form {
145
+ width: 500px;
146
+ overflow:hidden;}*/
147
+
148
+ ##{.formId} legend {
149
+ color:#fff;
150
+ font-size:20px;
151
+ text-shadow:0 1px 0 #000;
152
+ float: center;
153
+ }
154
+
155
+
156
+ ##{.formId} label {
157
+ display:block;
158
+ color:#ddd;
159
+ font-size:11px;
160
+ text-shadow:0 1px 0 #000;
161
+ clear: left;
162
+ float: left;
163
+ width: 35%;
164
+ }
165
+
166
+ ##{.formId} label.subtitle {
167
+ display:block;
168
+ color:#fff;
169
+ font-size:15px;
170
+ text-shadow:0 1px 0 #000;
171
+ clear: left;
172
+ float: left;
173
+ width: 35%;
174
+ }
175
+
176
+ ##{.formId} input {
177
+ /*border:1px solid;
178
+ border-color:#ccc #ddd #ddd #ccc;*/
179
+ padding:0px;
180
+ background-color:rgba(255, 255, 255, 0.9);
181
+ font-size:15px;
182
+ color:#555;
183
+ text-shadow:0 1px 0 #fff;
184
+ float:left;
185
+ width:60%;
186
+ text-align: left;
187
+ display: inline;
188
+ }
189
+
190
+ ##{.formId} input:focus {
191
+ background-color:#fff;
192
+ color:#000;
193
+ }
194
+
195
+ ##{.formId} input[required] {
196
+ font-weight:bold;
197
+ }
198
+
199
+ /* validation error message */
200
+ ##{.formId} .error {
201
+ background-color:#E8FF6D;
202
+ padding:4px;
203
+ color:#000;
204
+ -webkit-box-shadow: #000 0 0 12px;
205
+ -moz-box-shadow: #000 0 0 12px;
206
+ }
207
+
208
+ /* ..with a pure CSS arrow */
209
+ ##{.formId} .error em {
210
+ border:10px solid;
211
+ border-color:#E8FF6D transparent transparent;
212
+ bottom:-17px;
213
+ display:block;
214
+ height:0;
215
+ left:10px;
216
+ position:absolute;
217
+ width:0;
218
+ }
219
+
220
+ /* field with validation error */
221
+ ##{.formId} .invalid {
222
+ background-color:rgba(221, 233, 255, 0.898) !important;
223
+ }
224
+
225
+ /* date input */
226
+ ##{.formId} .date {
227
+ width:193px;
228
+ background:#666 none repeat scroll 0 0;
229
+ color:#fff;
230
+ text-shadow:0 0 1px #000;
231
+ }
232
+
233
+ ##{.formId} .date:focus {
234
+ background-color:#333;
235
+ color:#fff;
236
+ }
237
+
238
+ /* make some elements sit over the mask */
239
+ ##{.formId} .error, #calroot {
240
+ z-index:10000;
241
+ }
242
+
243
+ </style>
244
+ [#meth}
245
+
246
+ {#meth]trigger.CSVAddForm[#,]content[Add]
247
+ [#=]overlayId[{#case]#{.overlay}[#when]basic[#>]simple_overlay[#case}]
248
+ [#>]<#{.triggerMode} rel="##{.relId}" type="#{.triggerMode}">#{content}</#{.triggerMode}>
249
+ [#meth}
250
+
251
+ {#meth]html.CSVAddForm[#,]elements[][#,]insert[][#,]title[][#,]submit[Add][#,]form[]
252
+ [#,]required[][#,]labels@[{}][#,]types@[{}][#,]values@[{}]
253
+ [#=]overlayId[{#case]#{.overlay}[#when]basic[#>]simple_overlay[#case}]
254
+ [#%] try to find something easy to build depending on the kind of variables in the csv
255
+ [#>]
256
+ <div id="#{.relId}" class="#{overlayId}">
257
+ <form class="rounded" id="#{.formId}" method="post" action="#{.server}/rsrc/datatable/csv_addrow">
258
+ <input type="hidden" value="#{.filename}" name="csv"/>
259
+ [#?]#{+?form}[#>]#{form}
260
+ [#?]else
261
+ [#rb>]
262
+ required =[#{required}]
263
+ elements = #{=elements}.split("|").map{|e| e.strip}
264
+ elements=["title","fieldset","p"]+<.varnames@>+["/p","/fieldset"] if elements.empty?
265
+ unless #{=insert}.empty?
266
+ #{=insert}.split("|").map{|e| #
267
+ tmp,*tmp2=e.strip.split(":")
268
+ tmp2=tmp2.join(":")
269
+ ok=elements.index{|e| e==tmp[1..-1]}
270
+ if ok and [">","<"].include? tmp[0,1]
271
+ ok += 1 if tmp[0,1]==">"
272
+ elements.insert(ok,tmp2)
273
+ end
274
+ }
275
+ end
276
+
277
+ elements.each do |field| #
278
+ p field
279
+ case field
280
+ when /^title/
281
+ title=field.length>5 ? field[6..-1] : #{=title}
282
+ {#>]<legend>:{title}</legend>[#nl][#>}
283
+ when /^subtitle/
284
+ title=field[9..-1]
285
+ {#>]<label class="subtitle">:{title}</label>[#nl][#>}
286
+ when "fieldset"
287
+ {#>]<fieldset>[#nl][#>}
288
+ when "/fieldset"
289
+ {#>]</fieldset>[#nl][#>}
290
+ when "p"
291
+ {#>]<p>[#nl][#>}
292
+ when "/p"
293
+ {#>]</p>[#nl][#>}
294
+ else
295
+ label=<labels@>[field.to_sym] ? <labels@>[field.to_sym] : field.capitalize
296
+ type = field
297
+ if spec_type=(<types@>.find{|k,v| (v.include? field.to_sym)})
298
+ type=spec_type[0].to_s
299
+ puts "types";p field;p <types@>; p spec_type
300
+ end
301
+ value = <values@>[field.to_sym] ? <values@>[field.to_sym] : (type=="checkbox" ? "true" : "")
302
+ {#>]
303
+ <label>:{label}</label>
304
+ <input type=":{type}" {#if]required.include? field[#>]required="required"[#if} name=":{field}" value=":{value}"/>
305
+ [#>}
306
+ end
307
+ end
308
+ [#?]end[#>]
309
+ <button type="submit" style="position:absolute; top:90%;left: 90%;">#{submit}</button>
310
+ </form>
311
+ </div>
312
+ [#meth}
313
+
314
+ {#meth]js.CSVAddForm[#>]
315
+ <script>
316
+ $(document).ready(function() {
317
+ // validator. we use custom message layout with a CSS arrow
318
+ $("##{.formId}").validator({
319
+ message: '<div><em/></div>',
320
+ position: 'top left',
321
+ offset: [3, 40]
322
+ });
323
+
324
+
325
+ // overlay with masking. when overlay is loaded or closed we hide error messages if needed
326
+ $("#{.triggerMode}[rel]").overlay().bind("onBeforeClose", function(e) {
327
+ $(".error").hide();
328
+ });
329
+
330
+
331
+ // bind 'myForm' and provide a simple callback function
332
+ $("##{.formId}").ajaxForm({
333
+ //async: false,
334
+ //dataType: "jsonp",
335
+ success: function(formData, jqForm, options) {
336
+ var oTable = $('##{.csvdatatableId}').dataTable();
337
+ // Re-draw the table - you wouldn't want to do it here, but it's an example :-)
338
+ oTable.fnDraw();
339
+ var overlay=$("#{.triggerMode}[rel]").overlay();
340
+ overlay.close();
341
+ },
342
+ error: function (xhr, error, thrown) {
343
+ console.log(error+":"+xhr);
344
+ var oTable = $('##{.csvdatatableId}').dataTable();
345
+ // Re-draw the table - you wouldn't want to do it here, but it's an example :-)
346
+ oTable.fnDraw();
347
+ var overlay=$("#{.triggerMode}[rel]").overlay();
348
+ overlay.close();
349
+ }
350
+ });
351
+
352
+ });
353
+ </script>
354
+ [#meth}