Blame view

mustache/js/ajax.js 5.15 KB
5a739853   patrick.he   commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
  var arg = require('argh').argv; //read & parse arguements
  var engine_name = "hogan";//('engine' in arg && arg['engine'] == "mustache") ? "mustache" : "hogan";//hogan or mustache
  var engine = require("hogan.js")//require(engine_name == "hogan" ? "hogan.js" : "mustache")
    , fs    = require('fs')
    , extend= require('xtend')
    , AutoLoader = require('./classes/autoload-'+engine_name+'.js');
  
  var output_folder = 'output_folder' in arg ? arg['output_folder']+'/ajax' : 'output/ajax'
  
  var path_parts = output_folder.split(/[\\\/]/g);
  var new_folder = '';
  for(var p in path_parts) {
    var tmp = path_parts[p].replace(/^\s+/g, '').replace(/\s+$/g, '');
    new_folder = new_folder + tmp + "/";
    if( !fs.existsSync(__dirname+'/'+new_folder) ) fs.mkdir(__dirname+'/'+new_folder);
  }
  
  
  var compressor;
  try {
  	compressor = "compress" in arg && require('yuicompressor');
  } catch(e) {
  	compressor = null;//unable to resolve, means yuicompressor is not available
  }
  
  var path = 
  {
   data : __dirname + '/../app/data',
   views : __dirname + '/../app/views',
   base : '../..',
   assets : '../../assets',
   images : '../../assets/images',
   minified: ''
  }
  
  for(var p in path) {
  	if ('path_'+p in arg) path[p] = arg['path_'+p]
  }
  
  var site = JSON.parse(fs.readFileSync(path['data']+'/common/site.json' , 'utf-8'));//this site some basic site variables
  site['protocol'] = 'http:'
  //override config file with command line options
  for(var k in site) {
  	if (k in arg) site[k] = arg[k]
  }
  if(site['protocol'] == false) site['protocol'] = '';
  site['ajax'] = true;
  
  
  var Sidenav_Class = require('./classes/Sidenav')
  var sidenav = new Sidenav_Class()
  
  var Page_Class = require('./classes/Page')
  var Indentation = require('./classes/Indent')
  var autoload = new AutoLoader(engine , path);
  
  if(site['development'] == true) {
   site['ace_scripts'] = [];
   var scripts = JSON.parse(fs.readFileSync(__dirname + '/../../assets/js/ace/scripts.json' , 'utf-8'));
   scripts['ace.ajax-content.js'] = true;
   for(var name in scripts)
     if(scripts.hasOwnProperty(name) && scripts[name] == true) {
  	 site['ace_scripts'].push(name);
     }
  }
  
  
  
  //iterate over all pages and generate the static html file
  generate(null);
  var page_views_folder = path["views"]+"/pages";
  if(fs.existsSync(page_views_folder) && (stats = fs.statSync(page_views_folder)) && stats.isDirectory()) {
  	var files = fs.readdirSync(page_views_folder)
  	files.forEach(function (name) {
  		var filename;//file name, which we use as the variable name
  		if (! (filename = name.match(/(.+?)\.(mustache|html)$/)) ) return;
  		var page_name = filename[1];
  		
  		generate(page_name);
  	})
  }
  
  
  function generate(page_name) {
  	if(page_name == null) {
  		//the ajax layout page
  		var layout_name = 'ajax-layout';
  		var layout = new Page_Class( {'engine':engine, 'path':path, 'name':layout_name, 'type':'layout'} );
  		layout.initiate();
  		if(layout.get_var('sidebar_items'))
  		{
  			sidenav.set_items(layout.get_var('sidebar_items'));
  			sidenav.mark_active_item(page_name);
  		}
  		
  
  		var context = { "page":{} , "layout":layout.get_vars(), "path" : path , "site" : site }
  		context['breadcrumbs'] = sidenav.get_breadcrumbs();
  
  		context['createLinkFunction'] = function() {
  			return function(text) {
  				return '../'+text+'.html';
  			}
  		}
  		context['createAjaxLinkFunction'] = function() {
  			return function(text) {
  				return 'ajax.html#page/'+text;
  			}
  		}
  
  		autoload.set_params("" , layout_name);
  
  		var rendered_output = engine_name == "hogan" ? layout.get_template().render(context) : (layout.get_template())(context)
  		Indentation(rendered_output , site['onpage_help'], false, function(result) {
  			var output_file = output_folder+'/ajax.html';
  			fs.writeFileSync( __dirname + '/'+output_file , result, 'utf-8' );
  			console.log(output_file);
  		})
  	
  		return;
  	}
  	
  	var items = sidenav.get_items();//list of available pages, some are not included such as "horizontal menu, etc ..."
  	if( !(page_name in items) ) return;
  	
  	//other ajax content pages;
  	var page = new Page_Class( {'engine':engine, 'path':path, 'name':page_name, 'type':'page', 'compressor': compressor} );
  	page.initiate(function() {
  		var layout_name = 'ajax-content';
  		var layout = new Page_Class( {'engine':engine, 'path':path, 'name':layout_name, 'type':'layout'} );
  		layout.initiate();
  		/**if(layout.get_var('sidebar_items'))
  		{
  			sidenav.set_items(layout.get_var('sidebar_items'));
  			sidenav.mark_active_item(page_name);
  		}*/
  
  
  		var context = { "page":page.get_vars() , "layout":layout.get_vars(), "path" : path , "site" : site }
  		//context['breadcrumbs'] = sidenav.get_breadcrumbs();
  		context['createLinkFunction'] = function() {
  			return function(text) {
  				return '../'+text+'.html';
  			}
  		}
  		context['createAjaxLinkFunction'] = function() {
  			return function(text) {
  				return 'ajax.html#page/'+text;
  			}
  		}
  
  
  		autoload.set_params(page.get_name() , layout_name);
  
  		var rendered_output = layout.get_template().render(context);//engine_name == "hogan" ? layout.get_template().render(context) : (layout.get_template())(context)
  		Indentation(rendered_output , site['onpage_help'], true, function(result) {
  			var output_file = output_folder+'/'+page_name+'.html';
  			fs.writeFileSync( __dirname + '/'+output_file , result, 'utf-8' );
  			console.log(output_file);
  		})
  	})
  }