Blender Perpendicular Camera

Търсих си готов файл за Blender 3D с перпендикулярна камера, спрямо обект. Не намерих и реших да си направя сам такава сцена, защото в някои случаи ми се иска да рендвам изглед точно срещу (перпендикулярно над) обекта:
Blender_Camera_Perpendicular
Ето примерната сцена в която ренднах някакви обръчи:
Blender_perpendicular_camera

Файла може да се изтегли от тук: Blender – Perpendicular Camera

Share and Enjoy !

Shares

PHP-file UTF-8 encoding

Попаднах на стар хостинг (с php 5.2.3), който прецаква енкодинга при ъплауд на php-файлове. Изключително досаден проблем. Пробвах да вкарвам разни дивотии в .htaccess, но нищо не помогна. Ей такива неща опитах:

AddDefaultCharset utf-8
AddCharset utf-8 .php
DefaultLanguage en-US

Единствения шанс, който ми остана беше да накарам интерпретатора да каже на сървара, че файла трябва да се излъчи в UTF-8 encoding. По-долния код се поставя преди рендването на съдържанието:

<?php header('Content-Type: text/html; charset=utf-8'); ?>

Доста удобно за моя стил на програмиране :).

Share and Enjoy !

Shares

България – фалит ли ни очаква? Функционира ли държава въобще?

Нещата в държавата започват да отиват на зле! Прекалено хаотично се държи правителството на Орешарски. Ако се вслушаме внимателно в изказванията на премиера и министрите и махнем алабалистиката, обещанията с “ще”, обвиненията към другите политически играчи, картинката става по-постна и от постната пица на Дянков.
Какво имам в предвид?
Приходните агенции работят толкова зле, че буквално са на червено.
Митниците работят още по-зле. Събираемостта е паднала спрямо миналата 2012-та, въпреки обещанията на Орешарски, че само от контрабандни цигари ще добавят 1,5 милиарда. Е, къде ги тия милиарди? Източник.
Фискалния резерв е на санитарния минимум – 4,7 милиарда – и май няма шанс да мръдне нагоре. По-скоро ще се случи обратното. Източник.
Болниците затъват в дългове, като към момента борча им е над 500 милиона.
НЕК е пред фалит. В сметките им има едва 10 млн. лв., а общата задлъжнялост на НЕК е 5 млрд. лв.. Само за зелена енергия НЕК има борч от 1,5 милиарда лева. Източник.
Задълженията на БДЖ са 670 млн. лв. и няма земна сила, която да стопи този борч. Поне докато дружеството е държавно.
Пенсионната реформа е спряна, което означава, че до 10 години 100 пенсионера ще се издържат от 64 работещи. Но по-големия проблем е, че ЕС ще ни спре еврофондовете, заради липса на реформа. Източник.

Мога да продължа с фактите, но ми се иска да не съм толкова черноглед. До Нова години вероятно държавата ще е фалирала, а правителството на Орешарски ще си е подало оставката. Искрено се надявам, че следващите ще имат малко повече акъл в главата и ще се заемат истински с проблемите и реформите.
Аз се чувствам солидарен с протестиращите против правителството на Орешарски и се опитвам да следя ежедневно устрема на правителството да прави глупости и да ни забатачва в още по-голяма тиня. Ако вземат, та изтеглят още един милиарден заем, направо ще са за еб@не (щото само боя няма да помогне). Тъпи ли са, некадърни ли са, алчни ли са, марионетки ли са, не ме интересува. Да си взимат Делянчо Пеевски и всичките бай-Сали-та и да се пръждостват.
За това мога да кажа само едно: ОСТАВКА!

Share and Enjoy !

Shares

Задължителни приложения за нормална работа с таблет

Таблетите освен за консумиране на забавления, могат да бъдат и удобни устройства за ежедневна работа, която обикновено се извършва на PC. Визирам предимно Android таблетите. За целта трябва да им се инсталират някои базови приложения.
Ето на кои съм се спрял към момента:

External Keyboard Helper Pro – фонетична клавиатура за Android таблет. Платен е.
Bulgarian Keyboard 2 – безплатна клавиатура на български
Kingsoft Office (Multi-Lan) – мултиезичен, безплатен офис пакет. Поддържа Word, Excel, PowerPoint и други.
Photo Editor by Aviary – редактиране на снимки.
Jota text editor – Прост текстов редактор
Fx File Explorer – файлов браузер, архиватор и екстратор
WiFi File Transfer Pro – достъп и управление на файловете в таблета от друго устройство в мрежата. Безплатната версия има ограничение на трансфер на файл до 5Mb
English Bulgarian Dictionary F – английско-български речник
FBReader – четец за електронни книги. Съвместим е с OPDS-каталога на читанката.
TuneIn Radio – интернет радио. Изисква наличие на постоянна връзка.
Dropbox – онлайн хранилище за файлове. Безплатната регистрация осигурява 2Gb. Всъщност напоследък повече ползвам:
Google Диск – хранилище за вашите файлове. Безплатната версия е до 15Gb.
Unit Converter – конвертор на мерни единици
Battery Doctor (Battery Saver) – след потреблението на батерията и ви помага да го оптимизирате. Според мен увеличава с около 30% времето за ползване на таблета/телефона.
ColorDict Dictionary – речник. Аз го ползвам за Английско-Български, но зависи какъв ще си инсталирате. За да ползвате Eng-BG речниците разхархивирайте тези два файла (bul-eng, eng-bul) в директорията dictdata на SD картата.

Share and Enjoy !

Shares

Ainol Novo 7 Fire – ревю на таблета

Пазарувате ли от китайските сайтове за джаджи? Аз го правя често.
Последната ми придобивка е едно 7-инчово таблетче за четири годишната ми дъщеря, което ме изненада с параметрите и цената си – Ainol Novo 7 Fire.
Таблета ми излезе 104 долара, като намерих валиден купон код за 8% и го вкарах при покупката.
Изглежда така:


Параметри на устройството
Ainol Novo 7 Fire Features:
OS: Android 4.0.4 support Android 4.1 Jelly Bean Update
CPU: Dual Core AMLogic AML8726-M6 1.5GHz
GPU: Dual Core Mali 400*2 3D
RAM: 1GB,DDR3
Storage 16GB
Shell Material: Metal
Bluetooth: Yes Bluetooth 2.1
Screen: Capacitive Touchscreen, 1280*800 IPS High-resolution Screen
Size: 7 inch
Resolution: 1280*800 Pixels
Visible Angle: 180°
Display: IPS
Gravity Sensor: 3 Axis
Flash: Support Flash and HTML 5
Google Play (Market): Yes
Dual Camera: Front 2.0 Megapixels,Back 5.0 Megapixels Auto Foucus LED Light

Ainol Novo 7 Fire Tablet PC Details
Extend Card Support TF card up to 32GB extended
Multi-Touch Yes, 5 points touch
Android Market Yes
Skype Yes
Email and Browser: Yes, built in
WIFI: Yes, 802.11 b/g/n
3G : Not built in
Earphone Interface 3.5mm
Video 1080P, AVI/MOV/MP4/RMVB/FLV/MKV…
Music MP3/WMA/WAV/APE/AAC/FLAC/OGG
Ebook UMD, TXT, PDF, HTML, RTF, FB2…
Battery : 3.7V 5000 MAh 18.5Wh
Tablet Weight: 333g
Tablet Size: 186.7*126*10.6mm

Съдържание на пакета:
1 x Ainol Novo 7 Fire
1 x USB cable
1 x 5V 2A Charger + адаптер за европейски стандарт 220V
1 x Стерео слушалки

Направих и тестове с две от популярните програми за бенчмарк:
Quadrant Standard Editionlink
Ainol Novo 7 Fire - Quadrant Benchmark
Ainol Novo 7 Fire - Quadrant Benchmark
AnTuTu Benchmarklink
Ainol Novo 7 Fire - AnTuTu Benchmark
Ainol Novo 7 Fire - AnTuTu Benchmark
Ainol Novo 7 Fire - AnTuTu Benchmark
Ainol Novo 7 Fire - AnTuTu Benchmark
Въпреки ниско бюджетната ниша тестовете представят таблета на едно много добро ниво. Външно също мога да кажа само добри думи – стабилен алуминиев корпус, страхотен дисплей с яко покритие, удобно разположени копчета и допълнителни входове.
По време на игра таблета заби 1 път на някаква игра “Cordy”. Наложи се да рестартирам таблета, като задържа за няколко секунди бутона за включване.
Иначе таблета като цяло се държи отлично. Сложих му доста игри и приложения, които издърпах от Google Play. Едно от готини приложения е WiFi File Transfer, което ми позволява да влизам във файловата система на таблета през браузера и да манипулирам файловете както си искам.
Малко снимки и от дектопа:
Ainol Novo 7 Fire Таблет
Ainol Novo 7 Fire Таблет
Ainol Novo 7 Fire Таблет
Ainol Novo 7 Fire Таблет
Ainol Novo 7 Fire Таблет

За тия пари (по-малко от 160 лв) джджката е просто перфектна!
Да и е честито на дъщеря ми и дано изкара поне няколко месеца :)!

Share and Enjoy !

Shares

Подготвя ли се падане на валутният борд и инфлация?

От два дни започва да ми прави впечатление странна тенденция в статиите на новинарските ежедневници. Започвам да си задавам въпроси:
Пада ли валутният борд?
Грози ли ни зловеща инфлация и обезценяване на лева?
Това план ли е или е плод на некадърността на политиците ни?
Примерно статия от днес (12.09.2013):
Кризата променила възгледите на Орешарски за икономиката

Моето виждане отпреди кризата беше, че стабилната фискална политика е най-важна в дългосрочен хоризонт, но сега смених мисленето си, за мен по-важно е преструктурирането и структурните мерки, каза той.

Пламен Орешарски – на дискусията “Бъдеще за Европа” в Китай

Какво, по дяволите, значи това? Какво означава преструктуриране и структурни мерки? Защо те са по-важни от фискалната стабилност на държавата? Лично за мен това е една завоалирана алабалистика, която има за цел да ни подготви за едно предстоящо решение – падането на валутният борд! Да не говорим, че кризата започна 2008-ма година, а Орешарски чак сега я е забелязал, та и си сменил мнениято :). Изглежда като да се надува някакъв сапунен мехур от празнодумие, но какво се крие?

Естествено тенденциите в думите на Орешарски не остават незабелязани от много хитрия ни народ и вследствие водят до:
Лошите кредити на българите набъбнали с 43 млн. лв. за месец

Много от нас помнят голямата инфлация, когато за една нощ лева се обезценяваше с 300%. Тогава някои хора направиха много пари – кредитните милионери. Схемата беше добре подготвена и контролирана, така че да засегне само хората, които нямат допирателни със властта. Спестяванията се стопиха буквално за един миг.
Става ли същото и сега? Започвам да придобивам чувството, че това правителство дойде на власт с една-едничка цел и задача – да направи няколкото хора, които контролират държавата, още по-богати! Въобще не им пука за обикновения трудещ се човек, за това че едвам оцелява, че няма работа, че тока и парното са безбожно скъпи. Популизъм се лее ежедневно с измислени намаления на електро-енергията. Но не за това ми се ще да пиша в момента.

Друг важен белег за нещо лошо, което се случва е дефлацията. Новина също от днес:
Август е шестият пореден месец с дефлация

От началото на годината (август 2013 спрямо декември 2012) също е отчетена дефлация от 2.2%. Годишната инфлация (август 2013 спрямо август 2012 г.) е минус 0.7%. Средногодишната инфлация за периода септември 2012 – август 2013 г. спрямо периода септември 2011 – август 2012 г. е 2.9%.

Всеки, който е учил поне един семестър икономика знае, че дефлацията често е много по-опасна от инфлацията. При дефлация в най-общи линии се получават ниски приходи в бюджета, ниски печалби на фирмите, намаляне на работните места. Понякога дефлацията предхожда силна инфлация.
Съвсем скоро ще разберем какво са ни приготвили премиера Орешарски и задкулисното му обкръжение. Какво точно е искал да преструктурира и какво значат структурни мерки. Искрено се надявам да не съм прав, че се задават тежки времена за левчето. Моята прогноза е, че до април-май ще се случи нещо брутално ненормално с икономиката на България. Така, че ще е добре да сме предпазливи, а който има някой скътан лев е добре превантивно да го обърне в евро или друга стабилна валута.

Share and Enjoy !

Shares

Nimbus атомайзер и Private V2 механичен мод – ревю

Взех си да тествам малко от китайските бюджетни джаджи за е-цигарено изпаряване. Чиста механика, без грам електроника, та дори и без една жица. Дори батериите с които изпарявам, някакви Sanyo 2800Mah, са без защита, за да мога да подкарвам намотки с ниски съпротивления. Та бих искал да споделя виждането за подобна техника.
Взех ги от FastTech – Private V2 Mod, Nimbus 2.

Мода Private V2 се прецака на 2-я ден. Всъщност самия мод си е ок, обаче главата му е алуминиева и вече не мога да завия нормално дрипера. Хрумнаха ми разни типс анд трикс, колкото да мога да си го ползвам, но като цяло съм разочарован. Повече никакъв алуминий!!! Към момента го ползвам, като изрязах тънка лентичка от капачка на кисело мляко, която навивам предварително около вътрешната резба на главата на мода. Работи, но гледам да не свалям Nimbusa от него.
За Nimbusa спретнах dual coil намотка от Nichrome 0.22mm, а фабричните намотки заминаха директно в коша. Съпротивлението на едната на мотка е 1.6Ohm, което означава, че двете паралелно дават около 0.8Ohm. Пуши та се къса! Като цяло първият ми опит с дрипери (атомайзери с периодично ръчно накапване с никотинено сокче) го оценявам като успешен! Въпреки неудачите с мода.
Техниката изглежда така:

Private V2 + Nimbus

Private V2 + Nimbus

Private V2 + Nimbus

Така изглежда мода Private V2 с картомайзер Dream BT804 SS V2 – къса версия:
eyk0fJ

А това са съставните части на Private V2:
CjV1rd

Мода е малко по-дълъг от необходимото и не работи с единична батерия 18350, за това, а и заради алуминиевата глава е на цена от $12. Хитра и простичка конструкция, но не го препоръчвам! Ако някой иска да си купи готин механичен мод, нека приготви поне двойно на тия парички и да си вземе нещо стоманено (SS).
Примерно китайския клонинг на Nemesis, който е на невероятната цена от $29:
Nemesis

Share and Enjoy !

Shares

Изряване на сцена от филм и конвертиране до GIF-анимация

Малко се позабавлявах да изрязвам gif-чета от AVI-филм.
Необходими инструменти:
ffmpeg за Windows
Faststone Image Viewer
GifSicle за Windows
bash за Windows

Избираме си сцена от филм и виждаме времето на сцената, плюс-минус 1-2 секунди. Аз си избрах Mr. Brooks с бай Кевин Костнър. Плейването можем да го направим с всеки плеър. В случая използвам GOM-player:
AVI to Gif animation
Изрязваме сцената до jpeg, като използваме ffmpeg, но преди това влизаме в Bash, за да използваме брояч на файловете:
AVI to Gif animation
Ето и командата към ffmpeg:

ffmpeg -i "Mr.Brooks.2007.BRRip.XviD.AC3-SANTi.avi" -qscale 0 -r 23 -ss 00:02:01 -t 3 -f image2 foo-%03d.jpg

Изпълнението на горната команда ще извлече по 23 кадъра в секунда от AVI-файла и ще ги конвертира до jpg-картинки. Отваряме с FastStone директорията и изтриваме всички ненужни файлове. След това обработваме останалите файлове в Bach-режим, като си настройваме колко да се отреже от картината, намаляме размера и конвертираме всички файлове до GIF-картинки:
AVI to Gif animation

AVI to Gif animation

Предварително си записваме региона от сцената, който ни интересува. В случая режа регион 424x384px, като започвам от координати x=72, y=0:
004_01

AVI to Gif animation

AVI to Gif animation

AVI to Gif animation

AVI to Gif animation

След това използваме GifSicle, за да съединим всички GIF-файлове в един общ анимиран файл. Трябва да зададем delay (-d) мили секунди за всеки кадър, командата да цикли за всички GIF-ове последователно (-l *.gif), и името на изходния файл (-o Kostner.gif):

gifsicle -d 4 -l *.gif -o Kostner.gif

В резултат получаваме една прилична анимация, с която да се бъзикаме със съфорумците :):
AVI to Gif animation

А ето и още няколко рязаници от “Z-та световна война” с на Брат Пит бат му:
AVI to Gif animation

AVI to Gif animation

AVI to Gif animation

Ето и кратко видео, което показва подробно стъпките за правене на AVI to GIF animation:
[flv:https://blog.nediko.info/examples/avi_to_gif/Kostner_tutorial.flv examples/avi_to_gif/001.jpg 480 397]
Ако сървара не иска да пусне видеото, може да се изтегли и от тук:
Avi to GIF movie tutorial

==================

Update: 09.12.2016

Има и много по-прост начин за правене на подобни GIF-чета, като се използва само ffmpeg:

ffmpeg -i video.mkv -ss 416 -t 2 -filter:v "crop=500:360:240:30, scale=320:-1" -loop 0 -final_delay -1 out.gif

, където:
-ss 416 – старт на отрязъка. В случая 416-та секунда от видеото.
-t 2 – продължителност на отрязъка. В случая 2 секунди.
crop=500:360:240:30 – изрязва прозорец от горния ляв ъгъл с размери ШxВ: 500x360px. Започва да реже по X и Y: 240px по X и 30px по Y.
scale=320:-1 – преоразмерява видеото на ширина, като запазва съотношението по височина.
-loop 0 и -final_delay -1 – са за да стане видеото на непрекъсната GIF-анимация.

Един пример на анимация, която направих по този начин:

ffmpeg animate gif

Share and Enjoy !

Shares

JavaScript обекно ориентирано програмиране – наследяване (пример)

Един много прост пример за наследяване на клас в JavaScript.
В случая имам клас Shape (форма), който ще разширя с клас за правоъгълник (Rectangle), който на свой ред ще разширя с клас за квадрат (Square).

<html>
<head>
<script type="text/javascript">
var Shape = function() {name: 'Shape'};
Shape.prototype.toString = function() {return this.name;};
 
var Rectangle = function(width, height) {this.width = width; this.height = height; this.shape = 'Rectangle';};
Rectangle.prototype = new Shape;
Rectangle.prototype.constructor = Rectangle;
Rectangle.prototype.area = function() {return this.width * this.height;};
 
var Square = function(width) {this.width = width; this.shape = 'Square';};
Square.prototype = new Rectangle();
Square.prototype.constructor = Square;
Square.prototype.area = function() {return this.width * this.width;};
 
myShape = new Square(6);
</script>
</head>
<body>
	myShape = new Square(6) ==&gt;<br/>
	<script type="text/javascript">document.write(myShape.width);</script>
</body>
</html>

==========================================================

По-горния код е интересен, но тъй като съм го копирал и преработвал, без много да му вниквам, не е мисля, че е добър.
Ето така го оптимизирах, след като попрочетох малко за ООП-то на JavaScript:

var Shape = function () {};
 
var Triangle = function(w, h) { this.width = w; this.heigh = h; }
Triangle.prototype = new Shape();
Triangle.prototype.getArea = function () {return this.width * this.heigh; };
 
// ====== Kvadrat
var Square = function (l) { this.width = l; this.heigh = l; };
Square.prototype = new Triangle();
 
// ======== Examples
 
var square = new Square(4),
    triangle = new Triangle(2, 5);
 
print(square.getArea());
print(triangle.getArea());

За да стартирам кода използвам SublimeText2 с инсталирана приставка за стартиране на команди от шела Turtlestein, а за JavaScript интерпретатор използвам SpiderMonkey 1.8.5 for Windows.

Share and Enjoy !

Shares

Simple JavaScript rich text format editor

Прост, базов RTF редактор за сайт
JS_WisWyg_Editor_by_Ned
Дълго съм се чудил кой е най-подходящия JavaScript Wysiwyg редактор с най-много възможности за напасване към сайт. Ползвал съм NicEdit, TinyMCE и други, които сам съм писал, неподдържащи rich text format (RTF). Обаче напасването на тези редактори към различни дизайни е развибащо от към бачкане и тестване в различните браузери. Реших да почопля няколко такива редактора и да разбера кое е толкова загадъчно и сложно, за да се напише подобен редактор. Истината е тривиална и се казва – iFrame. Този таг се ползва в почти всички подобни редактори, точно заради поддръжката му на RTF. При събмитване на формата, цялото съдържание на iform се подава на textarea, който си седи удобно скрит.

Това е моят редактор, без CSS-форматиране, като в примера добавям и опция за обработка на текста от базата данни, където присъства без тагове, с ексейпнати малко по-рискови символи.

<?php
$field = '<a href="aloooha">Test\'ed. kavicha</a> dyra, byra.<br />Още текст и още "кирилица".';
$clearpost = $field;
 
 
if(isset($_POST['button'])){
	echo $_POST['myTextArea'];
	$clearpost = $_POST['myTextArea'];
}
 
//$clearpost = preg_replace('@delete|select|insert|update|where@i',"", $clearpost); // Почистване на 
//$clearpost = preg_replace('/[\x7f-\xff]/', "", $clearpost); // Clear Dirty Data
$clearpost = preg_replace("/;/", "&#59;", $clearpost);
$clearpost = preg_replace("/\*/", "&#42;", $clearpost);
$clearpost = preg_replace("/\r\n/", "<br />", $clearpost);
$clearpost = preg_replace("/\r/", "<br />", $clearpost);
$clearpost = preg_replace("/\n/", "<br />", $clearpost);
$clearpost = preg_replace("/</", "&lt;", $clearpost);
$clearpost = preg_replace("/=/", "&#61;", $clearpost);
$clearpost = preg_replace("/>/", "&gt;", $clearpost);
$clearpost = preg_replace("/\'/", "&#39;", $clearpost);
$clearpost = preg_replace("/\`/", "&#96;", $clearpost);
$clearpost = preg_replace("/\"/", "&quot;", $clearpost);
 
if (!get_magic_quotes_gpc()) $clearpost = preg_replace('@\\\@', "&#92;", $clearpost);
else {
	$clearpost = stripslashes($clearpost);
	$clearpost = preg_replace('@\\\@', "&#92;", $clearpost);
}
 
 
$clearpost = preg_replace("/&#39;/", "\&#39;", $clearpost); // Ескейпване на единичната кавичка, за да може да се показва в iframe!!!
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" /> 
<script src="wiswyg_ned/nedEditor.js"></script>
<script type="text/javascript">
 
window.onload=function(){
	iFrameOn();
	if(isIE){
		var myFrame = document.getElementById('richTextField');
		var frameDoc = myFrame.contentDocument || myFrame.contentWindow;
 
		if (frameDoc.document){
		  frameDoc = frameDoc.document;
		}
		frameDoc.write ('<?php echo html_entity_decode($clearpost, ENT_QUOTES); ?>') ;
	} else {
		window.frames['richTextField'].document.body.innerHTML = '<?php echo html_entity_decode($clearpost, ENT_QUOTES); ?>' ;
	}
}
</script>
</head>
<!-- <body onLoad="iFrameOn();" > -->
<body>
<form action="" enctype="multipart/form-data" name="myForm" id="myform" method="post">
<div id="wysiwyg_cp" style="padding:8px; width:700px;">
	<input type="button" onClick="iBold()" value="B"> 
	<input type="button" onClick="iUnderline()" value="U">
	<input type="button" onClick="iItalic()" value="I">
	<input type="button" onClick="iFontSize()" value="Text Size">
	<input type="button" onClick="iForeColor()" value="Text Color">
	<input type="button" onClick="iHorizontalRule()" value="HR">
	<input type="button" onClick="iUnorderedList()" value="UL"><br />
	<input type="button" onClick="iOrderedList()" value="OL">
	<input type="button" onClick="iLink()" value="Link">
	<input type="button" onClick="iUnLink()" value="UnLink">
	<input type="button" onClick="iImage()" value="Image">
	<input type="button" onClick="iRemoveFormat()" value="Remove Format"> 
</div>
	<!-- Hide(but keep)your normal textarea and place in the iFrame replacement for it -->
	<textarea style="display:none;" name="myTextArea" id="myTextArea" cols="100" rows="14"></textarea>
 
	<iframe name="richTextField" id="richTextField" ></iframe>
	<br />
	<input type="submit" name="button" id="button" value="Make Changes" onClick="javascript:submit_form();"/>
</form>
</body>
</html>

Съдръжанието на JavaScript файла:

// Check Browser
var isOpera = !!(window.opera && window.opera.version);  // Opera 8.0+
var isFirefox = testCSS('MozBoxSizing');                 // FF 0.8+
var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
    // At least Safari 3+: "[object HTMLElementConstructor]"
var isChrome = !isSafari && testCSS('WebkitTransform');  // Chrome 1+
var isIE = /*@cc_on!@*/false || testCSS('msTransform');  // At least IE6
 
function testCSS(prop) {
    return prop in document.documentElement.style;
}
//====================
 
 
function iFrameOn(){ 
    richTextField.document.designMode = 'On';
    //window.frames['richTextField'].document.body.innerHTML = '<a href="aloooha">Aloha</a> dyra, byra.<br />Още текст има тук.';	
}
function iRemoveFormat(){
    richTextField.document.execCommand('removeformat',false,null); 
}
function iBold(){
    richTextField.document.execCommand('bold',false,null); 
}
function iUnderline(){
    richTextField.document.execCommand('underline',false,null);
}
function iItalic(){
    richTextField.document.execCommand('italic',false,null); 
}
function iFontSize(){
    var size = prompt('Enter a size 1 - 7', '');
    richTextField.document.execCommand('FontSize',false,size);
}
function iForeColor(){
    var color = prompt('Define a basic color or apply a hexadecimal color code for advanced colors:', '');
    richTextField.document.execCommand('ForeColor',false,color);
}
function iHorizontalRule(){
    richTextField.document.execCommand('inserthorizontalrule',false,null);
}
function iUnorderedList(){
    richTextField.document.execCommand("InsertOrderedList", false,"newOL");
}
function iOrderedList(){
    richTextField.document.execCommand("InsertUnorderedList", false,"newUL");
}
function iLink(){
    var linkURL = prompt("Enter the URL for this link:", "http://"); 
    richTextField.document.execCommand("CreateLink", false, linkURL);
}
function iUnLink(){
    richTextField.document.execCommand("Unlink", false, null);
}
function iImage(){
    var imgSrc = prompt('Enter image location', '');
    if(imgSrc != null){
        richTextField.document.execCommand('insertimage', false, imgSrc); 
    }
}
function submit_form(){
    var theForm = document.getElementById("myform");
    theForm.elements["myTextArea"].value = window.frames['richTextField'].document.body.innerHTML;
    theForm.submit();
}

Сорс кода: wiswyg_by_ned.rar
Demo нa кода.

Share and Enjoy !

Shares