// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors // MIT License. See license.txt // page container wn.provide('wn.pages'); wn.provide('wn.views'); wn.views.Container = Class.extend({ _intro: "Container contains pages inside `#container` and manages \ page creation, switching", init: function() { this.container = $('#body_div').get(0); this.page = null; // current page this.pagewidth = $('#body_div').width(); this.pagemargin = 50; }, add_page: function(label, onshow, onhide) { var page = $('
') .attr('id', "page-" + label) .toggle(false) .appendTo(this.container).get(0); if(onshow) $(page).bind('show', onshow); if(onshow) $(page).bind('hide', onhide); page.label = label; wn.pages[label] = page; return page; }, change_to: function(label) { if(this.page && this.page.label === label) { $(this.page).trigger('show'); return; } var me = this; if(label.tagName) { // if sent the div, get the table var page = label; } else { var page = wn.pages[label]; } if(!page) { console.log(wn._('Page not found')+ ': ' + label); return; } // hide dialog if(cur_dialog && cur_dialog.display && !cur_dialog.keep_open) { cur_dialog.hide(); } // hide current if(this.page && this.page != page) { $(this.page).toggle(false); $(this.page).trigger('hide'); } // show new if(!this.page || this.page != page) { this.page = page; //$(this.page).fadeIn(); $(this.page).toggle(true); } $(document).trigger("page-change"); this.page._route = window.location.hash; $(this.page).trigger('show'); scroll(0,0); return this.page; } }); wn.views.Factory = Class.extend({ init: function(opts) { $.extend(this, opts); }, show: function() { var page_name = wn.get_route_str(), me = this; if(wn.pages[page_name]) { wn.container.change_to(wn.pages[page_name]); } else { var route = wn.get_route(); if(route[1]) { me.make(route); } else { wn.show_not_found(route); } } }, make_page: function(double_column) { var page_name = wn.get_route_str(), page = wn.container.add_page(page_name); wn.ui.make_app_page({ parent: page, single_column: !double_column }); wn.container.change_to(page_name); return page; } })