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.
- checksums.yaml +7 -0
- data/dyndoc/.DS_Store +0 -0
- data/dyndoc/Dyn/.postload +1 -0
- data/dyndoc/Dyn/.preload +1 -0
- data/dyndoc/Dyn/After.dyn +3 -0
- data/dyndoc/Dyn/Base.dyn +18 -0
- data/dyndoc/Dyn/Minimum.dyn +20 -0
- data/dyndoc/Model/Html/DefaultPost_html.dyn +5 -0
- data/dyndoc/Model/Html/DefaultPre_html.dyn +15 -0
- data/dyndoc/Model/Odt/DefaultPost_content.xml +3 -0
- data/dyndoc/Model/Odt/DefaultPost_tmpl_content.xml +3 -0
- data/dyndoc/Model/Odt/DefaultPre_content.xml +8 -0
- data/dyndoc/Model/Odt/DefaultPre_tmpl_content.xml +8 -0
- data/dyndoc/Model/Tex/ContentPost_tmpl.tex +1 -0
- data/dyndoc/Model/Tex/ContentPre_tmpl.tex +6 -0
- data/dyndoc/Model/Tex/DefaultPost_tmpl.tex +73 -0
- data/dyndoc/Model/Tex/DefaultPre_tmpl.tex +16 -0
- data/dyndoc/Model/Ttm/DefaultPost_tmpl.ttm +3 -0
- data/dyndoc/Model/Ttm/DefaultPre_tmpl.ttm +16 -0
- data/dyndoc/Std/Array.dyn +96 -0
- data/dyndoc/Std/Composer.dyn +38 -0
- data/dyndoc/Std/DevTag.dyn +101 -0
- data/dyndoc/Std/DynVar.dyn +23 -0
- data/dyndoc/Std/File.dyn +55 -0
- data/dyndoc/Std/Git.dyn +34 -0
- data/dyndoc/Std/List.dyn +46 -0
- data/dyndoc/Std/OOP.dyn +32 -0
- data/dyndoc/Std/Signal.dyn +18 -0
- data/dyndoc/Std/String.dyn +22 -0
- data/dyndoc/Std/Styles.dyn +1 -0
- data/dyndoc/Std/Test.dyn +282 -0
- data/dyndoc/Std/Utils.dyn +42 -0
- data/dyndoc/Std/Verb.dyn +5 -0
- data/dyndoc/Style/Notation/Math.dyn +7 -0
- data/dyndoc/Style/Notation/Stat/Classic.dyn +8 -0
- data/dyndoc/Style/Notation/Stat/Cqls.dyn +44 -0
- data/dyndoc/Style/Text/Std.dyn +5 -0
- data/dyndoc/Style/Text/StdAlias.dyn +3 -0
- data/dyndoc/Style/Text/StdTex.dyn +17 -0
- data/dyndoc/Style/Text/Txt.dyn +1 -0
- data/dyndoc/Tex/.postload +1 -0
- data/dyndoc/Tex/.preload +1 -0
- data/dyndoc/Tex/10pt_tmpl.tex +1 -0
- data/dyndoc/Tex/11pt_tmpl.tex +1 -0
- data/dyndoc/Tex/12pt_tmpl.tex +1 -0
- data/dyndoc/Tex/Article_tmpl.tex +1 -0
- data/dyndoc/Tex/Beamer.dyn_tex +35 -0
- data/dyndoc/Tex/BeamerHandout_tmpl.tex +2 -0
- data/dyndoc/Tex/Book_tmpl.tex +1 -0
- data/dyndoc/Tex/DefaultFirst_tmpl.tex +1 -0
- data/dyndoc/Tex/DefaultLast_tmpl.tex +8 -0
- data/dyndoc/Tex/Default_tmpl.tex +9 -0
- data/dyndoc/Tex/First_tmpl.tex +8 -0
- data/dyndoc/Tex/Fr_tmpl.tex +17 -0
- data/dyndoc/Tex/Header_tmpl.tex +3 -0
- data/dyndoc/Tex/InclGraph_tmpl.tex +19 -0
- data/dyndoc/Tex/InclSpatProc_tmpl.tex +70 -0
- data/dyndoc/Tex/InclSumMI_tmpl.tex +4 -0
- data/dyndoc/Tex/LargeA4_tmpl.tex +5 -0
- data/dyndoc/Tex/Last_tmpl.tex +1 -0
- data/dyndoc/Tex/Option_tmpl.tex +8 -0
- data/dyndoc/Tex/Png_tmpl.tex +1 -0
- data/dyndoc/Tex/RefCite2_tmpl.tex +16 -0
- data/dyndoc/Tex/RefCite_tmpl.tex +16 -0
- data/dyndoc/Tex/Report_tmpl.tex +1 -0
- data/dyndoc/Tex/Theorem_tmpl.tex +14 -0
- data/dyndoc/Tools/.DS_Store +0 -0
- data/dyndoc/Tools/Atom.dyn/index.dyn +42 -0
- data/dyndoc/Tools/AtomDyndocker.dyn/index.dyn +43 -0
- data/dyndoc/Tools/R/Fig.dyn +144 -0
- data/dyndoc/Tools/R/Tools.dyn +344 -0
- data/dyndoc/Tools/Tex/Beamer.dyn +204 -0
- data/dyndoc/Tools/Tex/BeamerSlide.dyn_tex +199 -0
- data/dyndoc/Tools/Tex/Pgf.dyn +115 -0
- data/dyndoc/Tools/Tex/Table.dyn +278 -0
- data/dyndoc/Tools/Tex/Tools.dyn +37 -0
- data/dyndoc/Tools/Tex/Verb.dyn +77 -0
- data/dyndoc/Tools/Web/.DS_Store +0 -0
- data/dyndoc/Tools/Web/Ace.dyn +54 -0
- data/dyndoc/Tools/Web/Code.dyn +129 -0
- data/dyndoc/Tools/Web/DHtmlX.dyn +39 -0
- data/dyndoc/Tools/Web/DataTable.dyn_html +354 -0
- data/dyndoc/Tools/Web/Html.dyn +286 -0
- data/dyndoc/Tools/Web/Html/JQuery.dyn +123 -0
- data/dyndoc/Tools/Web/Html/Styles.dyn +4 -0
- data/dyndoc/Tools/Web/JQueryTools.dyn +87 -0
- data/dyndoc/Tools/Web/Layout.dyn +86 -0
- data/dyndoc/Tools/Web/Layout/CQLS.dyn +6 -0
- data/dyndoc/Tools/Web/Layout/LJK.dyn +41 -0
- data/dyndoc/Tools/Web/TabBar.dyn +37 -0
- data/dyndoc/Tools/Web/Ttm.dyn +20 -0
- data/dyndoc/Tools/Web/Txtl.dyn +14 -0
- data/lib/dyndoc-core.rb +59 -0
- data/lib/dyndoc/base/envir.rb +541 -0
- data/lib/dyndoc/base/filter/call.rb +127 -0
- data/lib/dyndoc/base/filter/filter_mngr.rb +637 -0
- data/lib/dyndoc/base/filter/server.rb +882 -0
- data/lib/dyndoc/base/filters.rb +3 -0
- data/lib/dyndoc/base/helpers.rb +9 -0
- data/lib/dyndoc/base/helpers/core.rb +32 -0
- data/lib/dyndoc/base/helpers/parser.rb +188 -0
- data/lib/dyndoc/base/scanner.rb +886 -0
- data/lib/dyndoc/base/tags.rb +4 -0
- data/lib/dyndoc/base/tags/keys_mngr.rb +401 -0
- data/lib/dyndoc/base/tags/part_tag.rb +194 -0
- data/lib/dyndoc/base/tags/tag_mngr.rb +125 -0
- data/lib/dyndoc/base/tags/user_tag.rb +216 -0
- data/lib/dyndoc/base/tmpl.rb +6 -0
- data/lib/dyndoc/base/tmpl/eval.rb +581 -0
- data/lib/dyndoc/base/tmpl/extension.rb +337 -0
- data/lib/dyndoc/base/tmpl/manager.rb +450 -0
- data/lib/dyndoc/base/tmpl/oop.rb +57 -0
- data/lib/dyndoc/base/tmpl/parse_do.rb +2446 -0
- data/lib/dyndoc/base/tmpl/rbenvir.rb +54 -0
- data/lib/dyndoc/base/utils.rb +367 -0
- data/lib/dyndoc/common/dynArray.rb +234 -0
- data/lib/dyndoc/common/file.rb +52 -0
- data/lib/dyndoc/common/init.rb +2 -0
- data/lib/dyndoc/common/tilt.rb +149 -0
- data/lib/dyndoc/common/utils.rb +61 -0
- data/lib/dyndoc/common/uv.rb +163 -0
- data/lib/dyndoc/init/config.rb +296 -0
- data/lib/dyndoc/init/home.rb +9 -0
- data/lib/dyndoc/plugins/tex.rb +4 -0
- data/lib/dyndoc/plugins/tex/beamer.rb +208 -0
- data/lib/dyndoc/plugins/tex/tex_eval.rb +69 -0
- data/lib/dyndoc/plugins/tex/tex_parse_do.rb +25 -0
- data/lib/dyndoc/plugins/tex/tex_user_tag.rb +32 -0
- data/share/R/dyndocMsys2.R +5 -0
- data/share/R/dyndocTools.R +9 -0
- data/share/R/test.R +14 -0
- data/share/R/tools/dynArray.R +34 -0
- data/share/R/tools/dynCapture.R +84 -0
- data/share/R/tools/dynMsys2.R +54 -0
- data/share/julia/dynArray.jl +93 -0
- data/share/julia/dyndoc.jl +110 -0
- data/share/julia/ruby.jl +37 -0
- 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}
|