Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   Вполнение Javascript в XML (https://javascript.ru/forum/xhtml-html-css/6768-vpolnenie-javascript-v-xml.html)

x-yuri 17.04.2011 14:31

Цитата:

Сообщение от tenshi
что такое "защита от хсс"?

хм, и где подвох? Защита от внедрения на сайт кода злоумышленником. В контексте нашей беседы это, например, htmlpurifier

Цитата:

Сообщение от tenshi
>> вопрос лишь в том, решать ли её или же стыдливо прятать голову в песок, притворяясь буд-то её на самом деле нет.
> это решение одной проблемы и появление другой
чтд

боюсь причинно-следственная связь осталась за кадром

Цитата:

Сообщение от tenshi
если бы правила парсинга хтмл не были так сложны в сети меньше бы было дырявых сайтов.

и сеть бы развивалась другими темпами

tenshi 17.04.2011 15:27

отлично, а теперь попробуй с помощью htmlpurifer сделать невалидный хмл

мне как-то пох с какой скоростью развивается сеть. в ней и так полно дерьма. куда уж больше?

x-yuri 17.04.2011 19:21

Цитата:

Сообщение от tenshi
мне как-то пох с какой скоростью развивается сеть. в ней и так полно дерьма. куда уж больше?

чтд

Цитата:

Сообщение от tenshi
отлично, а теперь попробуй с помощью htmlpurifer сделать невалидный хмл

не понял, при чем тут xml и _не_валидный?

tenshi 18.04.2011 02:09

при том, что на выходе он генерирует ххтмл фрагмент

x-yuri 18.04.2011 11:59

Цитата:

Сообщение от tenshi
3. и эти специалисты не ноют, что битый хмл не будет показан пользователю. потому что знают, что у них он никогда битым не будет. а те, кто ноет - неявно подписываются тем самым под своей профессиональной непригодностью.

Цитата:

Сообщение от x-yuri
на чем основана эта уверенность?

Цитата:

Сообщение от tenshi
что такое "защита от хсс"?

это типа такой окольный способ ответа на мой вопрос?

Цитата:

Сообщение от tenshi
ошибки парсинга хмл выявляются очень быстро при первичном тестировании. а при правильно выбранных инструментах исключаются вовсе.

а что это за правильно выбранные инструменты и что ты вообще можешь посоветовать в плане xhtml?

B~Vladi 18.04.2011 12:13

Цитата:

Сообщение от x-yuri
советую выложить свой проект на github

Пока рано, а так да.
Цитата:

Сообщение от x-yuri
Но возможно что это все превратиться в нечто другое, не то, что ты хотел (чья-то реализация станет популярнее).

Главное, что бы идеология и архитектура сохранилась, а какая будет реализация - не важно.
Цитата:

Сообщение от x-yuri
на чем основана эта уверенность?

Ну так то он всё правильно говорит. Не умеешь работать с форматом - не берись.

Ну вот :(
Ещё кое-что надумал, пока пытался заснуть вчера... Асинхронность. Например (из прошлого html-кода):

this.parent.item.Style({
  display: 'none'
}, function(dataObject, property){
  // Представление изменилось
});

или:

this.parent.item.Event({
  click: false
}, function(dataObject, property){
  // Обработчик установлен
});


Так как всё происходит после выполнения кода, в недрах контроллера (платформы), сразу обработать результат не получится. Например, часто бывает нужно узнать размеры элемента сразу после изменения данных. Архитектура (которая у меня в голове и в черновиках) это позволяет сделать. Как вам такой код?!

tenshi 18.04.2011 12:29

на тот вопрос я не отвечал, так как не вижу смысла

любые инструменты, которые работают с документом не как со строкой, а как с деревом.

события надо не только вешать, но и убирать, поэтому лучше что-то типа такого:

var clickSpy= Spy( elem, 'click', function(){} ).listen() // создали и запустили прослушку
...
clickSpy.forget() // забили на прослушку
...
clickSpy.scream() // кричим другим агентам

B~Vladi 18.04.2011 12:36

Цитата:

Сообщение от tenshi
события надо не только вешать, но и убирать

delete this.parent.item.Event().click;


Цитата:

Сообщение от tenshi
clickSpy.scream() // кричим другим агентам

Это что такое? Модуль не может напрямую влиять на другие модули. Это чуть ли не основная цель всей архитектуры. Полная независимость.

x-yuri 19.04.2011 00:40

Цитата:

Сообщение от B~Vladi
Ещё кое-что надумал, пока пытался заснуть вчера... Асинхронность. Например (из прошлого html-кода):

ну асинхронность она определенно усложняет. Просто пока ее немного, это не мешает. А потом начинаешь изобретать цепочки вызовов, т.е. прячешь эту асинхронность. На github'е видел не одну библиотеку, в которой это есть. Например, можно так реализовать, через рекурсию, для небольших цепочек, на mootools:

var AsyncChain = new Class({
	Implements: [Events, Options],
	
	_chain: [],
	_state: {},
	
	initialize: function( options ){
		this.setOptions( options );
	},
	
	add: function( f ){
		this._chain.push( f );
		return this;
	},
	
	run: function(){
		run.of(this)(0);
		return this;
		
		function run( i ){
			var f = this._chain[i];
			if( ! f )
				return;
			f.of(this)( run.of(this).pass(i+1) );
		}
	},
    
	clear: function(){
		this._chain = [];
		return this;
	},
	
	set: function( options ){
		$extend( this._state, options );
		return this;
	}
});


пример использования:
var chain = new AsyncChain();
        chain.setOptions({
                'onFailure': onFailure.of(this).pass(chain),
                'onCancel': onCancel.of(this).pass(chain)
        })
             .set( options )
             .add( this._disableLink )
             .add( this._setPhotoUrl )
             .add( this._setPhotoDownloadUrl )
             .add( this._showThrobber )
             .add( photosession.getThumbnailPath )
             .add( photosession.setPhotoUploadUrl )
             .add( photosession.loadPhoto )
             .add( photosession.loadCropResize )
             .add( this._hideThrobber )
             .add( this._showDialog )
             .add( photosession.cropResize )
             .add( photosession.setThumbnailFormField )
             .add( this._loadThumbnail )
             .add( this._showThumbnail )
             .add( this._closeDialog )
             .add( this._enableLink )
             .run();

B~Vladi 19.04.2011 17:38

Не не не, Девид Блейн.

Вот, например, есть объект, описывающий тег:
var data = {
  value: 'text',
  display: false
}


Код модуля:
function module(data){
  // Изменяем данные
  data.text = 'new text';
  data.display = true;
}


Как это всё выглядит с наружи:
var data = getData(); // получаем объект data

// Ситуация - обрабатываем событие. Для этого передаем объект data всем модулям, которым он принадлежит
var modulesLength = modules.length;
while(modulesLength--){
  modules[modulesLength](data); // Модули сделали всё, что им необходимо
}

// Обновляем представление в соответствии с объектом data.
update(data);


Отсюда видно, что представление изменится только после выполнения обработчиков модулей. Что бы можно было учесть эту ситуацию - я и предложил это решение. Цепочки тут не нужны.

Цитата:

Сообщение от x-yuri
ну асинхронность она определенно усложняет.

Согласен. Это выглядит как асинхронность на уровне кода, но по сути это событие.


Часовой пояс GMT +3, время: 08:39.