typeahead Error: one of local, prefetch, or remote is required  

Если вы используете   typeahead.js  от Twitter, то возможно у вас могла выйти эта ошибка. она означает, что плагину необходимо указать один из источников информации в которых плагин будет искать значения автозавергения

Это удаленные prefetch, remote или готовые, вшитые в код local

Рассказать друзьям

Улучшаем юзабилити textarea с помощью ace.jsУлучшаем юзабилити textarea. Подключаем к нему xedit.js и получаем более или менее сносный редактор. Что если, хочется большего. К примеру подсветки синтаксиса в textarea 
Всем известно, что textarea в плане редактирования текста очень неудобен. Нет ни табов, ни подсветки синтаксиса, ни показа ошибок. Нет ничего, к чему мы привыкли в современных редакторах типа notepad++

Рассказать друзьям

конвертируем координаты центра карты в google maps в pixel координаты div бокса.

var scale = Math.pow(2, map.getZoom());
var nw = new google.maps.LatLng(
     map.getBounds().getNorthEast().lat(),
     map.getBounds().getSouthWest().lng()
);
var worldCoordinateNW = map.getProjection().fromLatLngToPoint(nw);
var worldCoordinate = map.getProjection().fromLatLngToPoint(map.getCenter());
var pixelOffset = new google.maps.Point(
     Math.floor((worldCoordinate.x - worldCoordinateNW.x) * scale),
     Math.floor((worldCoordinate.y - worldCoordinateNW.y) * scale)
);

нужно в гугл картах при работе с пиксельными координатами

Чтобы просто узнать пиксельные координаты центра карты, можно просто  worldCoordinate умножить покомпонентно на   scale 

А можно и так, даже проще 

var overlay = new google.maps.OverlayView();
overlay.draw = function() {};
overlay.setMap(map);
alert(JSON.stringify(overlay.getProjection().fromLatLngToContainerPixel(map.getCenter())))

Выведет относительные координаты центра карты внутри контейнера

 

Рассказать друзьям

Установка собственных userscript в Opera и Google Chrome   В браузере Opera подключить собственные скрипты весьма просто. Создаем папку, закидываем туда свои .js файлы. Затем на вкладке нужного сайта кликаем правой кнопкой мыши, выбираем пункт меню настройки для сайта и  выбираем вкладку скрипты. В пункте Папка пользовательских скриптов JavaScript находим созданную папку. Вот и все. Скрипты автоматически будут загружены для соответствующем сайте. Единственное, что нужно помнить - это порядок их загрузки. Опыт показывает, что скрипты загружаются в алфавитном порядке. К примеру jquery.js будет загружен раньше чем user.js. Это нужно помнить, когда подключаете jQuery, если его еще нет (да, Вы не поверите, но есть еще сайты без jQuery). Еще один тонкий момент: скрипты будут загружены для всех страниц сайта, в том числе и для всех фреймов. И соответственно будут выполняться для всех фреймов. Чтобы скрипт выполнялся только в главном фрейме, я делаю так

if(  !self.parent.frames.length ){
// тут код
}
Рассказать друзьям

По умолчанию ckeditor помещает все скрипты в документе в комментарий, и кодирует код скрипта через encodeURIComponent. Это политика безопасности. Чтобы скрипт не выполнялся при редактировании контента.  В  умелых руках это очень удобная фича. Заменяться могут не только скрипты, но и embed, iframe и object. К примеру текстовый парсер используется плагином flash для того, чтобы вставлять в документ flash объекты. При этом такой объект не инициализируется при редактировании,  а место него видна лишь иконка. Такую замену осуществляет editor.dataProcessor. Вот как он это делает

afterInit: function( editor ) {
	var dataProcessor = editor.dataProcessor,
	dataFilter = dataProcessor && dataProcessor.dataFilter;
	if ( dataFilter ) {
		dataFilter.addRules({
			elements: {
				'p(span2)': function( element ) {
					return editor.createFakeParserElement( element, 'cke_p_span', 'p_span', true );;
				},
			}
		}, 5 );
	}
}

createFakeParserElement создает "фейковый" (не настоящий) элемент, картинку и заменяет на него все теги <p> с классом span2. Так работает текстовый  dataProcessor.

Цифра 5 тут не случайна. Это порядок в котором происходит замена. Вот тут и возникает проблема замены script. Дело в том, что их экранирует сама система ckeditor, т.е. они в этот круговорот   dataProcessor.dataFilter не входят. Как же заменить <script> на свой фейковый элемент, или просто получить его значение.

Рассказать друзьям

Подкатегории

Все о разработке на библиотеке jQuery