Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (function($) {
- window.app = this;
- var config = {
- config_file:'data/config.js'
- };
- var lang = {loading:{config:'Loading application config...'}};
- var console = {
- log:function(){
- window.console.log.apply(window.console,arguments);
- }
- };
- function load_script(src,callback) {
- window.callback = callback;
- $('.jsonp').remove();
- var script = document.createElement('script');
- script.type = 'text/javascript';
- script.src = src;
- script.className = "jsonp";
- script.async = false;
- $('head')[0].appendChild(script);
- }
- /* Content module */
- var content = this.content = {
- set:function(content){
- this.getElement().html(content);
- },
- getElement:function(){
- return $('#main');
- },
- add:function(content){
- this.getElement().append(content);
- },
- localize:function(){
- $('[data-translate]').each(function(){
- var translate_value = $(this).attr('data-translate');
- if(lang.translate[translate_value]!=undefined){
- $(this).text(lang.translate[translate_value]);
- }
- });
- }
- };
- var page = this.page = {
- init:function(page_data){
- content.set('');
- $('#title').html(page_data.title);
- $('#subtext').html(page_data.subtitle != undefined ? page_data.subtitle : '');
- var generate_tags = this.generate_tags;
- page_data.data.forEach(function(el){
- if(el.type=='p'){
- content.add(generate_tags('p',el.data,el.attributes));
- }
- else if(block_processors[el.type] != undefined){
- block_processors[el.type](content,el);
- }
- else{
- console.log('Unknown type "'+el.type+'"');
- }
- });
- },
- load:function(filename){
- load_script(config.paths.articles+filename+'.js',function(data){
- $('.toc li').removeClass('active');
- $('.toc li a[href="#'+filename+'"]').parent().addClass('active');
- page.afterLoad(data);
- });
- },
- afterLoad:function(data){
- page.init(data);
- },
- generate_tags:function(name,data,attributes){
- if(typeof data != 'object'){
- var attributes_string = '';
- if(attributes != undefined){
- for(var key in attributes){
- attributes_string+=' '+key+'="'+attributes[key]+'"';
- }
- }
- return '<'+name+attributes_string+'>'+data+'</'+name+'>';
- }
- else{
- var tags = '';
- data.forEach(function(el){
- tags += page.generate_tags(name, el, attributes);
- });
- return tags;
- }
- }
- };
- /* Terms of content module */
- var toc = this.toc = {
- init:function(data){
- var list = $('<ul class="toc"/>');
- for(var index in data){
- var list_item = $('<li><a href="#'+data[index].file+'">'+data[index].title+'</a></li>');
- list.append(list_item);
- }
- $('#toc').append(list);
- },
- load:function(){
- content.set(lang.loading.toc);
- load_script(config.paths.data+config.paths.toc,function(toc_data){
- toc.init(toc_data);
- toc.afterLoad(toc_data);
- });
- },
- afterLoad:function(data){
- if(window.location.hash){
- page.load(window.location.hash.substr(1));
- }
- else{
- page.load(data[config.firstload].file);
- }
- }
- };
- /* Plugins module */
- var block_processors = {};
- var plugins = this.plugins = {
- load:function(plugins_list){
- if(plugins_list.length>0){
- this.loadPlugin(plugins_list[0],function(){
- plugins.load(plugins_list.slice(1));
- });
- }
- else{
- plugins.afterLoad();
- }
- },
- loadPlugin:function(plugin_name,load_next_plugin){
- load_script(config.paths.plugins+plugin_name+'.js',function(plugin_name,plugin_callback){
- block_processors[plugin_name] = plugin_callback;
- load_next_plugin();
- });
- },
- afterLoad:function(){
- toc.load();
- }
- };
- /* Startup functions */
- var init = this.init = function(){
- content.set(lang.loading.config);
- load_config();
- };
- var load_config = function(){
- load_script(config.config_file,function(data){
- config = data;
- load_lang();
- });
- };
- var load_lang = function(){
- load_script(config.paths.data+config.paths.lang,function(language_data){
- lang = language_data;
- content.localize();
- plugins.load(config.plugins);
- });
- };
- /* Running script on dom content ready */
- $(function(){
- init();
- });
- $(window).on('hashchange',function(a){
- var location = window.location.hash.substr(1);
- page.load(location);
- });
- })(jQuery);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement