Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 08.07.2011, 13:28
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Сообщение от FINoM Посмотреть сообщение
Нет, репост запрещен.
Хм...

Сообщение от Sweet Посмотреть сообщение
Прочитай томик Пушкина что ли, для вдохновения
)))

Сообщение от Sweet Посмотреть сообщение
И еще...Все в шоке: кричат, плачут, хотят от тебя ребенка.
А это к чему?
Ответить с цитированием
  #22 (permalink)  
Старый 08.07.2011, 14:32
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Sweet
А он отсюда удалит статью
В индексе она останется надолго.
Сообщение от Sweet
Прочитай томик Пушкина
Достаточно прочесть самих статей с того же хабра.
Ответить с цитированием
  #23 (permalink)  
Старый 08.07.2011, 14:39
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от mycoding
А это к чему?
К тому, что стоит избегать в статьях провакационных фраз, типа
Цитата:
я сел и за 5 часов перебрал весь Ext Core и из более чем 10000 строк кода...
Ответить с цитированием
  #24 (permalink)  
Старый 13.07.2011, 14:29
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Сделал небольшой чат на NodeJS.
Вот видео
http://www.youtube.com/watch?v=7mVOZ...er_profilepage
Вот код.
https://github.com/mycoding/Simple-Chat

Может кому-нибудь пригодится.
Ответить с цитированием
  #25 (permalink)  
Старый 13.07.2011, 14:37
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Нормально. Код не расширяемый, но судя по видео, рабочий.

Hint: json лучше генерировать посредством JSON.stringify().
Ответить с цитированием
  #26 (permalink)  
Старый 13.07.2011, 20:08
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Чат сделал просто для теста.
Надеюсь не слетит
http://moc-081.ru/chat/done.html
Ответить с цитированием
  #27 (permalink)  
Старый 13.07.2011, 20:17
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Либо так
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<link rel="stylesheet" type="text/css" href="http://moc-081.ru/ext/resources/css/ext-all.css" />
	<script type="text/javascript" src="http://moc-081.ru/ext/adapter/ext/ext-base.js"></script>
	<script type="text/javascript" src="http://moc-081.ru/ext/ext-all.js"></script>
	<script src="http://vreshenie.ru/work/comet/cross-domain/extjs-cross-domain.js"></script>
	<style>
		.icon-user {
			background-image: url("http://www.vreshenie.ru/resources/user.png") !important;
		}
		.icon-users {
			background-image: url("http://www.vreshenie.ru/resources/group.png") !important;
		}
		.icon-pencil {
			background-image: url("http://www.vreshenie.ru/resources/pencil.png") !important;
		}		
		.icon-comments {
			background-image: url("http://www.vreshenie.ru/resources/comments.png") !important;
		}		
	</style>
<script>
var messages = [],
	users_online = [];//,
	//chat_property = {login:'',sid:''};
Ext.onReady(function(){
	function sendMessage(login){
		var msg = Ext.getCmp('idMsgChat').getValue();
		if(msg.length!=0){
			crossDomainRequest('sendMessage',{login:window.login,sid:window.sid,msg:msg,action:'sendMessage'})
		}
	}

	function runLoginedChat(){
		var win = Ext.getCmp('windowChat');
		win.setTitle('Cross-domain comet chat on ExtJS+nodeJS');
		
		var login = Ext.getCmp('login');			
		win.items.items[1].el.fadeOut({callback:function(){
			login.hide();
		}});
		
		var buttonLogin = Ext.getCmp('idLoginButton');
		buttonLogin.setText('Send');
		buttonLogin.setIconClass('icon-pencil');
		buttonLogin.setHandler(function(){
			sendMessage(login);
			Ext.getCmp('idMsgChat').setValue('');
		});
		
		var xy=win.getPosition();
		var x = xy[0]-100;
		var y = xy[1]-100;
		win.el.shift({
			x: x,
			y: y,
			duration:1,
			//easing:effect,
			callback:function(){
				win.el.shift({
					width:400,
					callback:function(){
						win.setWidth(400);
						win.setHeight(300);
						
						var str=' ';
						for(var i=0;i<messages.length;i++){
							str+=""+messages[i].login+":"+messages[i].msg+'</br>';
						}
						Ext.getCmp('serverMessage').update(str);
												
						Ext.getCmp('idMsgChat').show();
						Ext.getCmp('serverMessage').show();
						Ext.getCmp('idUsersOnline').show();
						var winUserOnline = Ext.getCmp('idWinUsersOnline'),
							windowChatXY = Ext.getCmp('windowChat').getPosition(),
							windowChatXYSize = Ext.getCmp('windowChat').getSize();
						winUserOnline.setPosition(windowChatXY[0]+windowChatXYSize.width+50,windowChatXY[1]);						
						winUserOnline.show();
						
						var treeUserOnline = Ext.getCmp('idTreeUserOnline');
						for(var i=0;i<users_online.length;i++){
							var newNode = new Ext.tree.TreeNode({id:"'"+users_online[i]+"'", text:users_online[i], leaf: true});
							treeUserOnline.root.appendChild(newNode);							
						}
						
						crossDomainRequest('getMessage',{login:window.login,sid:window.sid,action:'getMessage'});
					}
				});
			}
		});
	}
	
	function crossDomainRequest(action,params){
		Ext.Ajax.request({
			timeout:300,
			url: 'http://node2.tw1.ru/',
			//url: 'http://127.0.0.1:1337/',
			params:params || {},
			scriptTag: true,
			success: function(r){
				var message = r.responseObject.msg;
				var login = r.responseObject.login;
				//console.log(message);
				//console.log(r);
				if(action=='getMessage'){
					if(!r.responseObject.reconnect){
						if(login!='Server'){
							messages.push({msg:message,login:login});
						}
						var str=' ';
						
						for(var i=0;i<messages.length;i++){
							str+=""+messages[i].login+":"+messages[i].msg+'</br>';
						}
												
						if(login=='Server'){
							var action_server = r.responseObject.action_server;							
							switch(action_server){
								case 'join':
									str+="<b>Server</b>:"+message+' join</br>';
									messages.push({msg:message+' join',login:'<b>'+login+'</b>'});
									var newNode = new Ext.tree.TreeNode({id: "'"+message+"'", text: message , leaf: true});
									Ext.getCmp('idTreeUserOnline').root.appendChild(newNode);
									break;
								case 'left':
									str+="<b>Сервер</b>:"+message.join(',')+' left</br>';
									var users_left = message;
									messages.push({msg:message.join(',')+' left',login:'<b>'+login+'</b>'});
									for(var i=0;i<users_left.length;i++){
										var node = Ext.getCmp('idTreeUserOnline').getNodeById("'"+users_left[i]+"'");
										if(node){
											Ext.getCmp('idTreeUserOnline').root.removeChild(node);
										}
									}									
									break;
								default:
							}
						}
						
						Ext.getCmp('serverMessage').update(str);						
					}					
					crossDomainRequest('getMessage',{login:window.login,sid:window.sid,action:'getMessage'});
				}
				if(action=='login'){
					if(r.responseObject.success){
						messages = r.responseObject.msgs;
						window.sid = r.responseObject.sid;
						users_online = r.responseObject.users_online;
						
						runLoginedChat();
					}
					else{
						Ext.Msg.alert('Error', r.responseObject.error);
					}
					//console.log(r.responseObject);
				}
				if(action=='sendMessage'){}
				if(action=='usersOnline'){
					messages.push({login:r.responseObject.login,msg:r.responseObject.msg});
					var str=' ';
					for(var i=0;i<messages.length;i++){
						str+=""+messages[i].login+":"+messages[i].msg+'</br>';
					}
					Ext.getCmp('serverMessage').update(str);
				}
			},			
			failure:function(){
				console.log('failure');
				Ext.Msg.alert('Error','Critical error on server');
				if(action=='getMessage'){
					crossDomainRequest('getMessage',{login:window.login,action:'getMessage'});
				}				
			}
		});
	}
	
	function chatLogin(){
		var login = Ext.getCmp('login').getValue();
		window.login=login;
		crossDomainRequest('login',{login:login,action:'login'});
	}
	
	var w = new Ext.Window({
		resizable:false,
		closable:false,
		id:'windowChat',
		shadow:false,
		iconCls:'icon-comments',
		title:'Chat',
		width:270,
		height:95,
		layout:'form',
		bodyStyle:'padding:5px 5px 0',
		items:[{
			id:'serverMessage',
			bodyStyle:'padding:5px 5px',
			height:230,
			hidden:true,
			autoScroll:true,
			html:'Place for massages'
		},{
			id:'login',
			xtype:'textfield',
			fieldLabel:'Input nick',
			listeners: {
				specialkey: function(field, e){
					if (e.getKey() == e.ENTER){
						chatLogin();
					}
				}
			}
		}],
		bbar:[{
			id:'idMsgChat',
			xtype: 'textfield',
			width:260,
			hidden:true,			
			listeners: {
				specialkey: function(field, e){
					if (e.getKey() == e.ENTER){
						var msg = Ext.getCmp('idMsgChat');
						if(msg.getValue().length>0){
							sendMessage(w.login);
							Ext.getCmp('idMsgChat').setValue('');
						}
					}
				}
			}
		},'->',{
			id:'idUsersOnline',
			text:'Users',
			iconCls:'icon-users',
			hidden:true,
			handler:function(){
				crossDomainRequest('usersOnline',{login:window.login,sid:window.sid,action:'getUsersOnline'});
			}
		},'','',{
			id:'idLoginButton',
			text:'Enter',
			iconCls:'icon-user',
			handler:chatLogin
		}]		
	}).show();
	
	new Ext.Window({
		id:'idWinUsersOnline',
		title:'Пользователи онлайн',
		closeAction:'hide',
		layout:'fit',
		closable:false,
		width:170,
		height:195,
		items:[{
			xtype:'treepanel',
			id:'idTreeUserOnline',
			autoScroll: true,
			root: new Ext.tree.AsyncTreeNode({
				expanded: true,
				children: []
			}),
			rootVisible: false,
			listeners: {
				click: function(n){
					//console.log(n.attributes.id);
					//var newNode = new Ext.tree.TreeNode({id: "5", text: "foo", leaf: true});
					//Ext.getCmp('idTreeUserOnline').root.appendChild(newNode);
					//var node = Ext.getCmp('idTreeUserOnline').getNodeById('2');
					//if(node){
					//	Ext.getCmp('idTreeUserOnline').root.removeChild(node);
					//}
				}
			}
		}]
	})
});
</script>
</head>
<body>
</body>
</html>
Ответить с цитированием
  #28 (permalink)  
Старый 14.07.2011, 13:22
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

Я вообще завел эту тему, потому что когда целый день пишешь код,
который разместишь на сайте хочется доброго слова от Community.
радуйся, что тебе хоть что-то пишут. меня вот все игнорят ._."

Цитата:
У меня знаний очень много, но стараюсь всегда писать, что я ничего не знаю. Но это не значит, что я реально ничего не знаю. Я знаю очень много.
только я вижу тут взаимоисключающие параграфы? х)
__________________
.ня
Ответить с цитированием
  #29 (permalink)  
Старый 14.07.2011, 13:29
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Сообщение от tenshi Посмотреть сообщение
Я вообще завел эту тему, потому что когда целый день пишешь код,
который разместишь на сайте хочется доброго слова от Community.
радуйся, что тебе хоть что-то пишут. меня вот все игнорят ._."

только я вижу тут взаимоисключающие параграфы? х)
Я читал Ваш блог http://javascript.ru/blog/tenshi
Он настолько классный, что даже ничего не понял)))
Вы не могли бы чуть более подробней написать?
Я поняли, что тема про СУБД и псевдо потоки на js.
Меня это очень интересует и если Вы приведете побольше примеров и разместите проект на github я и многие читали будут Вам благодарны.

PS:
Ссылка битая:http://smileg.jino-net.ru/_files/dao.js

Если есть время пишите блоги, они у Вас очень серьезные.
Если Вы это знали еще в 2008 году, то я представляю какой сейчас у Вас уровень в js.
Ответить с цитированием
  #30 (permalink)  
Старый 14.07.2011, 13:58
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

там были ещё статьи, да я их выпилил, когда на хабр перебирался. %-) дао всё хотел переписать, да руки не доходили, а про потоки там фигня написана, непрактично это.

могу поделиться инвайтом на хабр, но тебя там быстро заминусуют и будешь как я только комментить чужие топики. вообще, я смотрю яваскриптовое комьюнити в рунете какое-то куцое. dklab.ru заглох. javascript.ru заполонили ламеры со своими "животрепещущими" вопросами. только на хабре яваскриптеры и остались. но там, чтобы иметь возможность вещать на комьюнити, нужно старательно лизать всем задницу. одно неосторожное слово и ты исключаешься из этого междусобойчика. и не важно есть тебе что предложить сообществу или нет.

если интересно - можешь почитать http://tenshi.habrahabr.ru/blog/
__________________
.ня
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сервисы для реализации оплаты кредитками на сайте. nyols Серверные языки и технологии 1 29.05.2011 13:44
смена CSSна сайте в зависимости от дня недели dac_60 Элементы интерфейса 29 12.12.2010 15:05
Полоса с логотипом на чужом сайте. slider88 Общие вопросы Javascript 6 23.11.2009 10:21
отключение кнопочки обновления на сайте azetoon Общие вопросы Javascript 3 29.06.2008 11:14
Отображение локальных картинок на удаленном сайте Esciloner (X)HTML/CSS 3 17.12.2007 01:48