News  1.0.0

Abricos! User Interface Library > News > manager.js (source view)
Filters
/**
* @version $Id: manager.js 281 2009-12-28 14:50:11Z roosit $
* @package Abricos
* @copyright Copyright (C) 2008 Abricos All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
*/


/**
 * @module News
 * @namespace Brick.mod.news
 */

var Component = new Brick.Component();
Component.requires = {
    mod:[
         {name: 'sys', files: ['data.js', 'container.js', 'widgets.js']},
         {name: 'news', files: ['api.js']}
    ]
};
Component.entryPoint = function(){
	var Dom = YAHOO.util.Dom,
		E = YAHOO.util.Event,
		L = YAHOO.lang;

	var __selfCT = this;
	
	var NS = this.namespace, 
		TMG = this.template;
	
	var API = NS.API;
	
	if (!Brick.objectExists('Brick.mod.news.data')){
		Brick.mod.news.data = new Brick.util.data.byid.DataSet('news');
	}
	var DATA = Brick.mod.news.data;
	
(function(){
	
	var TM = TMG.build('panel'), 
		T = TM.data,
		TId = TM.idManager;

	/**
	 * Панель "Список новостей".
	 * 
	 * @class NewsListPanel
	 */
	var NewsListPanel = function(){
		NewsListPanel.superclass.constructor.call(this, {
			modal: true,
			fixedcenter: true			
		});
	};
	YAHOO.extend(NewsListPanel, Brick.widget.Panel, {
		el: function(name){ return Dom.get(TId['panel'][name]); },
		initTemplate: function(){
			return T['panel'];
		},
		onLoad: function(){
			
			this.newsListWidget = new NS.NewsListWidget(TId['panel']['container']);
			
			var firstRender = true, __self = this;
			this.newsListWidget.parentRender = this.newsListWidget.render;
			this.newsListWidget.render = function(){
				this.parentRender();
				if (firstRender){
					__self.center();
				}
				firstRender = false;
			};
		},
		
		/**
		 * Обработать закрытие панели.
		 * 
		 * @method onClose
		 */
		onClose: function(){
			this.newsListWidget.destroy();
		},
		
		/**
		 * Обработать клик мыши по области панели.
		 * 
		 * @method onClick
		 * @param {HTMLElement} el
		 * @return {Boolean}
		 */
		onClick: function(el){
			var tp = TId['panel'];
			switch(el.id){
			case tp['bclose']: this.close(); return true;
			}
			return false;
		}
	});
	
	NS.NewsListPanel = NewsListPanel;	
})();	

(function(){
	
	var scbAPI =  Brick.objectExists('Brick.Subscribe.API') ? Brick.Subscribe.API : null;

	var NewsListWidget = function(el){
		
		var TM = TMG.build('widget,table,row,rowwait,rowdel,btnpub'), 
			T = TM.data, TId = TM.idManager;
		this._TM = TM, this._T = T, this._TId = TId;
		
		var config = {
			rowlimit: 10,
			tables: {
				'list': 'newslist',
				'count': 'newscount'
			},
			tm: TM,
			paginators: ['widget.pagtop', 'widget.pagbot'],
			DATA: DATA
		};
		NewsListWidget.superclass.constructor.call(this, el, config);    
	};
	
    YAHOO.extend(NewsListWidget, Brick.widget.TablePage, {
    	initTemplate: function(){
    		return this._T['widget'];
    	},
    	renderTableAwait: function(){
    		this._TM.getEl("widget.table").innerHTML = this._TM.replace('table', {
    			'scb': '',
    			'rows': this._T['rowwait']
    		});
    	},
		renderRow: function(di){
    		return this._TM.replace(di['dd']>0 ? 'rowdel' : 'row', {
    			'dl': Brick.dateExt.convert(di['dl']),
    			'tl': di['tl'],
    			'dp': (di['dp']>0 ? Brick.dateExt.convert(di['dp']) : this._T['btnpub']),
    			'prv': '/news/'+di['id']+'/',
    			'scb': '',
    			// 'scb': L.isNull(this.scbAPI)?'':T['scbrow']
    			'id': di['id']
			});
    	},
    	renderTable: function(lst){
    		this._TM.getEl("widget.table").innerHTML = this._TM.replace('table', {
    			'scb': '',
    			'rows': lst
    		}); 
    	}, 
    	onClick: function(el){
    		var TM = this._TM, T = this._T, TId = this._TId;
    		
    		if (el.id == TM.getElId("widget.refresh")){
    			this.refresh();
    			return true;
    		}
			if (el.id == TId['widget']['btnnew']){
				API.showEditorPanel(0);
				return true;
			}
			if (el.id == TId['widget']['rcclear']){
				this.recycleClear();
				return true;
			}
			
			var prefix = el.id.replace(/([0-9]+$)/, '');
			var numid = el.id.replace(prefix, "");
			
			switch(prefix){
			case (TId['rowdel']['restore']+'-'):
				this.restore(numid);
				return true;
			case (TId['row']['remove']+'-'):
				this.remove(numid);
				return true;
			case (TId['row']['edit']+'-'):
				API.showEditorPanel(numid);
				return true;
			case (TId['btnpub']['id']+'-'):
				this.publish(numid);
				return true;
			//case (TId['scbrow']['id']+'-'):
			//	this.subscribe(numid);
			//	return true;
			}
			return false;
    	},
    	
		changeStatus: function(commentId){
    		var rows = this.getRows();
    		var row = rows.getById(commentId);
    		row.update({
    			'st': row.cell['st'] == 1 ? 0 : 1,
    			'act': 'status'
    		});
    		row.clearFields('st,act');
    		this.saveChanges();
		}
    });

	NS.NewsListWidget = NewsListWidget;
})();
};