Файлы статей

Get Image Color

Получить наиболее часто используемые цвета в изображении

Пример работы со скриптом getImageColor.php

Пример работы со скриптом getImageColor.php

Пример мультипоточной работы с курл

Два файла index.php и once.php. Сравниваем скорость мультипоточной загрузки и последовательной.

плагин ckeditor syntaxhighlight с на русском языке

Плагин на wysiwyg редактор ckeditor, который позволяет вставлять в html страницу фрагменты кода на различных языках программирования. Чтобы в дальнейшем Alex Gorbatchev's SyntaxHighlighter их верно подсвечивал.

локализация плагина ckeditor syntaxhighlight с на русский язык

Файл локализации плагин на ckeditor SyntaxHighlighter.

Исходные примеры работы с PHP Simple HTML DOM Parser

В архиве 5 файлов + архив с документацией на PHP Simple HTML DOM Parser.

Файл pars_page.php содержит пример загрузки одной страницы яндекс картинок.

Файл pars_all_page.php содержит пример загрузки всех найденных страниц.

Файл parse_all_page_and_big_photo.php содержит готовый парсер для скачивания больших фото с поисковой выдачи яндекс картинок. 

Скрипт миграции из модулюя article в модуль news в Danneo CMS

Скрипт миграции из модулюя article в модуль news в Danneo CMS

jQuery UI Datepicker 1.7.1

Просто DatePicker из библиотеки виджетов jQuery UI. Все ядро библиотеки и сам виджет вшиты в один файл, это было сделано для простоты установки

Плагин на JQuery для получения и замены выделенного на странице такста

Плагин на JQuery для получения и замены выделенного на странице такста.

Работать с ним очень просто:

Используется функция $.selection(window), она возвращает объект с двумя методами get и set.

$.selection().get().html // вернет выделенный html
$.selection().get().text // вернет выделенный text
$.selection().set('Привет'); // заменит выделенный текст на Привет
$.selection().set(text,function(text,info,replaceFunc){
	replaceFunc('Привет') // заменяем выделенную часть на Привет 
	return false; // тогда по умолчанию set не зменяет text 
}); // заменит выделенный текст на Привет 
$.selection().set(text,function(text,info,replaceFunc){ 
	replaceFunc(info.html.replace('Hello','Привет')) // заменяем в выделенной части Hello на Привет 
	return false; // тогда по умолчанию set не зменяет text 
}); // заменит выделенный текст на Привет

По сути, это не плагин jQuery. И практически не использует ее инфраструктуру. Так что без труда можно подключить к любой библиотеке.

Модуль Интернет магазин на Danneo CMS v.0.5.4

Модуль Интернет магазин на Danneo CMS v.0.5.4. 

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

Демо можно потрогать тут

Подробнее

Модуль Интернет магазин на Danneo CMS v.0.5.3

Модуль Интернет магазин на Danneo CMS v.0.5.3 

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

Демо можно потрогать тут

Подробнее

Универсальный Генератор RSS

Универсальный генератор RSS. Поддерживает формат RSS1.0, RSS2.0, ATOM.

Плагин Галерея xdGallery на jQuery

Плагин галерея на jQuery. Примеры использования

Для того чтобы плагин работал к проекту нужно подключить следующие файлы

<script type="text/javascript" src="js/jquery.mousewheel.min.js"></script>
<script type="text/javascript" src="js/jquery.xdGallery.js"></script>
<link rel="stylesheet" href="js/xdGallery/jquery.xdGallery.css" type="text/css" /

Сами items'ы подаются в произвольном виде, главное они должны быть в неком боксе

<div id="myGallery">
	<img alt="xdGallery на jQuery" src="tmp/images/jquery/xdGallery/photo1.jpeg"/> 
	<img alt="xdGallery на jQuery" src="tmp/images/jquery/xdGallery/photo2.jpeg"/>
	<img alt="xdGallery на jQuery" src="tmp/images/jquery/xdGallery/photo3.jpeg"/>
</div>

ну и непосредственно вызов плагина нужно делать в событии onDomReady

$(function(){
 $('#myGallery').xdGallery({navigation:5});
});
xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery

и вертикальный вариант

$(function(){
 $('#myGalleryVertical').xdGallery({horizontal:false});
});

xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery xdGallery на jQuery

доступные опции

Название Описание Значение по умолчанию
shag px за один шаг прокрутки 200
speed время за которое карусель прокрутится на один шаг(shag) 200
itemClass пометка каждого item'а классом itemXDGalery
easingWheel характер прокрутки при вращении колесиком swing
easingNext характер прокрутки при прокрутке через next,prev linear
easingDrag характер прокрутки при перетаскивании, эффект инерции linear
invertWheel инвертировать прокрутку при вращении колесика мышки (1 или -1) 1
invertNext инвертировать прокрутку при нажатии кнопок next и prev (1 или -1) -1
horizontal горизонтальная ориентация галереи, по умолчанию true, если false то вертикальная ориентация true
onHoverNext прокручивать карусель при наведении на кнопку next или prev false
navigation навигация, если false, то выключена. Если >0, то равно на сколько табов будет делиться карусель, если указать = 0, то будет автоматически подбирать под количество items false

 

Класс переводчик текста на PHP через Google Translate

Класс парсит возвращенную Google Translate страницу результата и возвращает переведенный текст извлеченный из страницы.

 

Пример использования

<?php
error_reporting(E_ALL ^ E_NOTICE);
include('translate.class.php');
$x = new translator_text();
$text = 'Al Hotel Demo si vive in armonia con se stessi';
echo'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';
echo $x->translate(strip_tags(trim($text)), 'it', 'ru');
?> 

 

COIN SLIDER симпотичный слайдер на jQuery

Как использовать

Подключаем все необходимые файлы:

<script type="text/javascript" src="jquery-1.7.1.js"></script>
<script type="text/javascript" src="coin-slider.min.js"></script>
<link rel="stylesheet" href="coin-slider-styles.css" type="text/css" />

Далее добавляем в страницу нужные изображения. В таком формате

<div id='coin-slider'>
	<a href="img01_url" target="_blank">
		<img src='img01.jpg' >
		<span>
			Описание изображения №1
		</span>
	</a>
	......
	......
	<a href="imgN_url">
		<img src='imgN.jpg' >
		<span>
			Описание изображения №n
		</span>
	</a>
</div>

Инициализируем плагин

<script type="text/javascript">
jQuery(function() {
	$('#coin-slider').coinslider();
});
</script>

Подробнее в статье Симпотичный COIN слайдер на jQuery с уникальными эффектами перехода

Библиотека xdFileStorage для работы с файловой системой в браузере

Файл xdFileStorage.js для работы с файловой системой через браузер

/*!
 * xdFileStorage JavaScript Library
 * http://xdan.ru/
 *
 * Copyright 2012, Chupurnov Valeruiy
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *
 * Date: San Juli 2 0:58:34 2012 +0500
 */
var xdFileStorage = function(quota){
	var thisfs = this;
	thisfs.fisy = 0;
	/**
	 * @name fsWork
	 * @descr Метод проверяет работает ли в данном браузере функции для работы с файлами
	 * @example var fs = new xdFileStorage(50);
	 if(fs.fsWork){
	 //код
	 }
	 */
	thisfs.fsWork =function(){
		return window.File && window.FileReader && window.FileList && window.Blob;
	}
	/**
	 * @name writeBlob
	 * @descr Метод записывает в файл filename, содержимое параметра blob 
	 и вызывает callback функцию next по завершению процесса записи
	 */
	thisfs.writeBlob = function( filename,blob,next ){
		thisfs.fisy.root.getFile(filename, {create: true}, function(fileEntry) {
			fileEntry.createWriter(function(fileWriter) {
			fileWriter.onwriteend = function(e) {
				next&&next();
				console.log('Write completed.');
			};
			fileWriter.onerror = function(e) {
				console.log('Write failed: ' + e.toString());
			};
			fileWriter.write(blob);
			}, errorHandler);
	  }, errorHandler);
	}
	function onInitFs( fsyst ){
		thisfs.fisy = fsyst;
	}
	function errorHandler(e) {
		var msg = '';
		switch (e.code) {
			case FileError.QUOTA_EXCEEDED_ERR:
			msg = 'QUOTA_EXCEEDED_ERR';
			break;
			case FileError.NOT_FOUND_ERR:
			msg = 'NOT_FOUND_ERR';
			break;
			case FileError.SECURITY_ERR:
			msg = 'SECURITY_ERR';
			break;
			case FileError.INVALID_MODIFICATION_ERR:
			msg = 'INVALID_MODIFICATION_ERR';
			break;
			case FileError.INVALID_STATE_ERR:
			msg = 'INVALID_STATE_ERR';
			break;
			default:
			msg = 'Unknown Error';
			break;
		};
		console.log('Error: ' + msg);
	}
	/**
	 * @name removeFile
	 * @descr Метод удаляет из виртуальной файловой системы браузера файл с названием filename 
	 и вызывает callback функцию next по завершению процесса удаления
	 * @example (new xdFileStorage(50)).removeFile('1.png');
	 */
	thisfs.removeFile = function ( filename,next ){
		thisfs.fisy.root.getFile( filename, {}, function( fileEntry ) {
			fileEntry.remove(function() {
				console.log('File removed.');
			}, errorHandler);
		}, errorHandler);
	}
	/**
	 * @name loadRemoteFile
	 * @descr Метод загружает удаленный файл dataurl c MIME типом MIMEType в файл с именем filename
	 и вызывает callback функцию next по завершению процесса загрузки и сохраненеия, для работы с другими доменами требуется разрешенный cross-domain ajax
	 * @example 
	 var fs = new xdFileStorage(50);
	 fs.loadRemoteFile('1.png','http://xdan.ru/views/lite/images/logo.png',function(){
		alert('Загрузка завершена');
	 })
	 */
	thisfs.loadRemoteFile = function( filename,dataurl,next,MIMEType ){
		var req = new XMLHttpRequest();
		req.responseType = "arraybuffer";
		req.open('GET', dataurl, true); // загружаем асинхронно
		req.onreadystatechange = function (data){ 
			if ( req.status == 200 && req.readyState==4 ) {
				var bb = new BlobBuilder();
				bb.append( req.response ); 
				thisfs.writeBlob(filename,bb.getBlob( MIMEType||'image/jpg' ),next);
			}
		};
		req.send(null);
	}
	/**
	 * @name saveObjectToFile
	 * @descr Метод распечатывает объект obj в файл с именем filename
	 и вызывает callback функцию next по завершению процесса сохраненеия
	 * @example var fs = new xdFileStorage(50);
	 fs.saveObjectToFile('1.txt',{1:1,2:2,3:3,'a':123},function(){
		alert('wrtie completed!');
	 })
	 Результатом будет файл с содержанием
	 1=>1
	 2=>2
	 3=>3
	 a=>123
	 or
	 fs.saveObjectToFile('1.txt',[1,2,3,4],function(){
		alert('wrtie completed!');
	 })
	 Результат
	 0=>1
	 1=>2
	 2=>3
	 3=>4
	 */
	thisfs.saveObjectToFile = function( filename,obj,next ){
		var bb = new BlobBuilder();
		for( var i in obj )
			bb.append(i+'=>'+obj[i]+'\n');
		thisfs.writeBlob(filename,bb.getBlob('text/plain'),next);
	}
	/**
	 * @name strToFile
	 * @descr Метод сохраняет строку str в файл с именем filename
	 и вызывает callback функцию next по завершению процесса сохраненеия
	 * @example var fs = new xdFileStorage(50);
	 fs.strToFile('1.txt','Привет Мир!',function(){
		alert('wrtie completed!');
	 })
	 Результатом будет файл с содержанием
	 Привет Мир!
	 */
	thisfs.strToFile = function( filename,str,next ){
		var bb = new BlobBuilder();
		bb.append(str);
		thisfs.writeBlob(filename,bb.getBlob('text/plain'),next);
	}
	window.BlobBuilder = window.BlobBuilder||window.WebKitBlobBuilder;
	window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;
	window.requestFileSystem(window.PERSISTENT, (quota||5)*1024*1024 /*5MB*/, onInitFs, errorHandler); // дисковая квота под файл, по умолчанию 5MB
	return this;
};

Подключение:

<script type="text/javascript" src="xdFileStorage.js"></script>

Запись строки в текстовый файл:

var fs = new xdFileStorage();
fs.strToFile('example1.txt','В этот файл, запишется эта строчка!',function(){
 alert('Сохранение завершено!');
});

Загрузка удаленного изображения и сохранение его в файл:

var fs = new xdFileStorage(50);
 fs.loadRemoteFile('1.png','http://xdan.ru/views/lite/images/logo.png',function(){
	alert('Загрузка завершена');
 })

Загрузка нескольких удаленных изображений:

// не правильный вариант
var fs = new xdFileStorage(50);
for(var i =1; i<5; i++)
	fs.loadRemoteFile(i+'.png','http://xdan.ru/views/lite/images/logo'+i+'.png',function(){
		alert('Загрузка завершена');
	})
// работать небудет!!!(Don't work!!!)

верно будет сделать так:

var fs = new xdFileStorage(50);
function req(i){
	fs.loadRemoteFile(i+'.png','http://xdan.ru/views/lite/images/logo'+i+'.png',function(){
		if(i>1)req(i-1); else alert('Загрузка всех изображений завершена');
	})
}
req(5);// будет работать верно

распечатка массива в файл:

var fs = new xdFileStorage(50);
 fs.saveObjectToFile('1.txt',{1:1,2:2,3:3,'a':123},function(){
	alert('Запись завершена!');
})
/*
Результатом будет файл с содержанием
1=>1
2=>2
3=>3
a=>123
 */
 fs.saveObjectToFile('1.txt',[1,2,3,4],function(){
	alert('Запись завершена!');
})
/*
Результат
0=>1
1=>2
2=>3
3=>4
*/

Боле подробно про работу с файлами через JavaScript читайте в цикле статей Работа с файлами в JavaScript, Часть 1: Основы 

Приложение xdParser-v.1.1 Google Chrome Extension демонстрация client-side парсера на javaScript

В папке js два файла main.js и main2.js. Подключив первый в main.html

<script type="text/javascript" src="/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="/js/xdFileStorage.js"></script>
<script type="text/javascript" src="/js/main.js"></script>

приложение будет парсить фото Джессики Альбы из первого примера,

 

Великолепная Джессика Альба - парсер Yandex картинок Google Chrome Extension

 

при замене на 

<script type="text/javascript" src="/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="/js/xdFileStorage.js"></script>
<script type="text/javascript" src="/js/main2.js"></script>

приложение будет парсить сайт http://www.skelbiu.lt

 

Парсер сайта www.skelbiu.lt xdParser v.1.1. приложение Google Chrome Extension

 

Подключать оба файла одновременно нельзя.

В отличии от статьи, второй парсер чуть более доработан, и сохраняет полученные телефоны в текстовый файл. Который находится там же где и фото великолепной Джессики. У меня это папка C:\Users\Leroy\AppData\Local\Google\Chrome\User Data\Default\File System\000\p\00

Установка: 

Распаковываем архив.

 

Кликаем на панели браузера Google Chrome по иконке с гаечным ключемНастройки и управление Google Chrome(Настройки и управление Google Chrome), затем Инструменты -> Расширения, ставим в самом верху галку Режим разработчика

Далее кликаем  Загрузить распакованное расширение... и указываем путь к папке с распакованным архивом.

Подробнее читайте в статье Пишем javascript парсер при помощи Google Chrome Extension

 

 

Класс tulipIP для работы с изображениями в php

Полезный класс для работы с изображениями. Из возможностей: обрезка, поворот, инвертирование, фильтры: яркость, контраст, оттенки серого, embos, edge, колоризация и др. Подробнее о работе скрипта вы можете прочитать в статье Класс для обработки, добавления эффектов и обрезки изображений на PHP

ckeditor plugin реализующий событие onselect

Плагин реализует событие onselect в редакторе ckeditor. Подробнее о его работе можно почитать в статье ckeditor событие on select

Распаковываем архив ckeditor/plugins

В ckeditor/config.js добавляем 

config.extraPlugins = 'onselect';  

теперь в любом месте Вашего плагина можно использовать его так

editor.on( 'select', function(e){alert(e.getSelection().getSelectedText() )});

 

javascript алгоритм двумерной упаковки или компактная расстановка прямоугольников

Javascript алгоритм двумерной упаковки или компактная расстановка прямоугольников. Демо

Как использовать:

Подключаем файл

<script src="xdRectPacker.js" language="javascript"></script>

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

<div id="mosaic" style="width: 200px; height: 200px; position: relative">
	<div style="width: 20px; height: 61px; position: absolute; background-color: rgb(0, 0, 92)" id="div1"/>
	<div style="width: 23px; height: 28px; position: absolute; background-color: rgb(150, 217, 0);" id="div2"/>
	<div style="width: 21px; height: 90px; position: absolute; background-color: rgb(81, 196, 94); id="div3"/>
	***
	<div style="width: 49px; height: 24px; position: absolute; background-color: rgb(0, 82, 99);  id="div20"/>
</div>

далее собираем все блоки в массив blocks

var mosaic = document.getElementById('mosaic');
var tags = mosaic.getElementsByTagName('div');
var blocks = [],
    packer = new xdRectPacker( 200,false ); // создаем пакер, true для горизонтальной ориентации
for(var i in tags){
	var div = tags[i];
	if( div.style )
		blocks.push(new xdRect(0,0,parseInt(div.style.width),parseInt(div.style.height)));
}

далее расставляем все блоки

packer.fit(blocks);
for(var i in packer.pack){
	var div = tags[i];
	var block = packer.pack[i];
	if(div.style){
		div.style.left = block.x;
		div.style.top = block.y;
		div.style.width = block.w;
		div.style.height = block.h;
	}
}

Внимание: может сильно тормозить при большом количестве блоков, оптимально для использования не больше 100 блоков

Подробнее об алгоритмах упаковки можно прочитать в статье javascript алгоритм двумерной упаковки или компактная расстановка прямоугольников

Страница 1 из 2