Я хотел написать программу, смысл программы это смайлы в социальной сети (vkontakte.ru) У меня есть скрипт Smiles.js этот скрипт образует смайлы вконтакте!
| Код | var VkSmiles = { // смайлики для панели smiles: { "O=)": "aa.gif", ":-)": "ab.gif", ":(": "ac.gif", ";-)": "ad.gif", ":-P": "ae.gif", "8-)": "af.gif", ":-D": "ag.gif", ":-[": "ah.gif", "=-O": "ai.gif", ":-*": "aj.gif", ":'(": "ak.gif", ":-X": "al.gif", ">:o": "am.gif", ":-|": "an.gif", ":-/": "ao.gif", "*JOKINGLY*": "ap.gif", "]:->": "aq.gif", "[:-}": "ar.gif", "*KISSED*": "as.gif", ":-!": "at.gif", "*STOP*": "av.gif", "*KISSING*": "aw.gif", "@}->--": "ax.gif", "*THUMBS UP*": "ay.gif", "*DRINK*": "az.gif", "*IN LOVE*": "ba.gif", "@=": "bb.gif", "*HELP*": "bc.gif", "\\m/": "bd.gif", "*OK*": "bf.gif", "*WASSUP*": "bg.gif", "*BRAVO*": "bi.gif", "*LOL*": "bj.gif", "*PARDON*": "bk.gif", "*NO*": "bl.gif", "*CRAZY*": "bm.gif", "*DONT_KNOW*": "bn.gif", "*DANCE*": "bo.gif", "*YAHOO*": "bp.gif", "*PRIVET*": "bq.gif", "*BYE*": "br.gif", "*YES*": "bs.gif", "*WALL*": "bu.gif", "*MAIL*": "bv.gif", "*SCRATCH*": "bw.gif" },
// таблица отображения smiles_map: { "O:-)": "aa.gif", "O=)": "aa.gif", ":-)": "ab.gif", "=)": "ab.gif", ":)": "ab.gif", ":-(": "ac.gif", ":(": "ac.gif", ";(": "ac.gif", ";-)": "ad.gif", ";)": "ad.gif", ":-P": "ae.gif", "8-)": "af.gif", ":-D": "ag.gif", ":-[": "ah.gif", "=-O": "ai.gif", "o_O": "ai.gif", ":-*": "aj.gif", ":'(": "ak.gif", ":-X": "al.gif", ":-x": "al.gif", ">:o": "am.gif", ">:o": "am.gif", ":-|": "an.gif", ":-\\": "ao.gif", ":-/": "ao.gif", "*JOKINGLY*": "ap.gif", "]:->": "aq.gif", "]:->": "aq.gif", "[:-}": "ar.gif", "*KISSED*": "as.gif", ":-!": "at.gif", "*TIRED*": "au.gif", "*STOP*": "av.gif", "*KISSING*": "aw.gif", "@}->--": "ax.gif", "@}->--": "ax.gif", "*THUMBS UP*": "ay.gif", "*DRINK*": "az.gif", "*IN LOVE*": "ba.gif", "@=": "bb.gif", "*HELP*": "bc.gif", "\\m/": "bd.gif", "*OK*": "bf.gif", "*WASSUP*": "bg.gif", "*SUP*": "bg.gif", "*SORRY*": "bh.gif", "*BRAVO*": "bi.gif", "*LOL*": "bj.gif", "*ROFL*": "bj.gif", "*PARDON*": "bk.gif", "*NO*": "bl.gif", "*CRAZY*": "bm.gif", "*DONT_KNOW*": "bn.gif", "*UNKNOWN*": "bn.gif", "*DANCE*": "bo.gif", "*YAHOO*": "bp.gif", "*YAHOO!*": "bp.gif", "*HI*": "bq.gif", "*PREVED*": "bq.gif", "*PRIVET*": "bq.gif", "*HELLO*": "bq.gif", "*BYE*": "br.gif", "*YES*": "bs.gif", "*WALL*": "bu.gif", "*DASH*": "bu.gif", "*WRITE*": "bv.gif", "*MAIL*": "bv.gif", "*SCRATCH*": "bw.gif" },
regex: /(O:-\)|O=\)|:-\)|:\)|=\)|:-\(|:\(|;\(|;-\)|;\)|:-P|8-\)|:-D|:-\[|=-O|o_O|:-\*|:\'\(|:-X|:-x|>:o|>:o|:-\||:-\\|:-\/|\*JOKINGLY\*|\]:-\>|\]:->|\[:-\}|\*KISSED\*|:-\!|\*TIRED\*|\*STOP\*|\*KISSING\*|\@\}-\>--|\@\}->--|\*THUMBS UP\*|\*DRINK\*|\*IN LOVE\*|\@\=|\*HELP\*|\\m\/|\*OK\*|\*WASSUP\*|\*SUP\*|\*SORRY\*|\*BRAVO\*|\*LOL\*|\*ROFL\*|\*PARDON\*|\*NO\*|\*CRAZY\*|\*DONT_KNOW\*|\*UNKNOWN\*|\*DANCE\*|\*YAHOO\*|\*YAHOO\!\*|\*HI\*|\*PREVED\*|\*PRIVET\*|\*HELLO\*|\*BYE\*|\*YES\*|\*WALL\*|\*DASH\*|\*WRITE\*|\*MAIL\*|\*SCRATCH\*)/gi,
is_smile_table_shown: false,
click_handler_added: false, smiles_per_line: 7,
/* * Меняет на странице текстовые смайлы на графияеские анимированные */ render: function(doc) { var t = this; /* * Фукнция, отображающие текстовые смайлики на графические */ function map(str, p1, offset, s) { var image = t.smiles_map[p1]; return "<img src='"+ VkbResources.smile_images[image] +"' title='"+p1+"' >"; } function apply_smiles(doc, node) { var content = node.data; content = content.replace(t.regex, map); try { if (content != node.data) { var new_node = doc.createElement('span'); new_node.innerHTML = content; node.parentNode.replaceChild(new_node, node); } } catch(e) { alert(e); } } var nodes = doc.evaluate( "//body//text()", doc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null ); for(i = 0; i < nodes.snapshotLength; i++) { var node = nodes.snapshotItem(i); if(node.parentNode.toString() != '[object XPCNativeWrapper [object HTMLTextAreaElement]]') apply_smiles(doc, node); } },
/* * Создает панель для выбора смайликов, которые будут добавляться в container * * @param doc объект класса Document * @param container поле, куда будут добавляться смайлики (обычно, textarea) */ createBar: function(doc, container) { var t = this;
function show_bar() { var smiles_table = doc.getElementById('vkbutton_smiles_table'); smiles_table.style.display = 'block'; t.is_smile_table_shown = true; }
function hide_bar() { var smiles_table = doc.getElementById('vkbutton_smiles_table'); smiles_table.style.display = 'none'; t.is_smile_table_shown = false; }
function docClickHandler(e) { var elem = e.originalTarget; var smiles_table = doc.getElementById('vkbutton_smiles_table');
if(elem.getAttribute('is_smile_button')) {
/* * При клике по кнопке */ switch(t.is_smile_table_shown) { case true: hide_bar(); break; case false: smiles_table.setAttribute('container_id', elem.getAttribute('container_id')); // показ в месте клика smiles_table.style.top = doc.defaultView.pageYOffset + e.clientY + 'px'; smiles_table.style.left = doc.defaultView.pageXOffset + e.clientX + 'px'; show_bar(); break; } } else if (elem.getAttribute('is_smile')) { /* * Надо самому себе объяснить, как это все работает ))) * Есть таблица со смайликами, показываемая в месте клика, привязанной * к соотвествующему контейнеру. При щелчке по кнопке, в поле container таблицы * со смайликами сохраняется ID контейнера, куда должен быть добавлен смайл. * Когда смайл выбран и пользователь кликнул по нему, восстанавливается * этот контейнер и его значение дополняется текстовой записью смайла. */ var container = doc.getElementById(smiles_table.getAttribute('container_id')); if(container) { container.value += ' '+elem.title + ' '; container.focus(); }; hide_bar();
} else if(elem.getAttribute('is_smile_table_close')) { hide_bar(); } else { /* * При клике вне таблицы прячем ее. */ if(t.is_smile_table_shown) { hide_bar(); } } }
/* * Таблица со смайликами */ function createSmileTable() { var table = doc.createElement('table'); table.setAttribute('style', 'display:none; z-index: 9999; position: absolute; top: 0px; left: 0px; border: 1px solid black; background: #ffffff'); table.setAttribute('id', 'vkbutton_smiles_table');
// строка с кнопкой "закрыть" var tr = doc.createElement('tr'); var td = doc.createElement('td'); td.setAttribute('colspan', t.smiles_per_line); td.setAttribute('style', 'text-align: right;');
// собственно, сама кнопка "закрыть" var a = doc.createElement('a'); a.setAttribute('style', 'cursor: pointer'); a.setAttribute('is_smile_table_close', true); a.appendChild(doc.createTextNode('закрыть'));
td.appendChild(a); tr.appendChild(td); table.appendChild(tr);
// строки со смайликами tr = doc.createElement('tr'); var counter = 0; for(var smile in t.smiles) { //dump(smile+'\r\n'); // добавляем картинку var img = new Image(); img.setAttribute('title', smile); img.setAttribute('style', 'cursor: pointer; border: 1px solid white;'); img.setAttribute('src', VkbResources.smile_images[t.smiles[smile]]); img.setAttribute('is_smile', true); /* * При перемещении */ img.addEventListener('mouseover', function(e) { this.style.border = '1px solid red'; }, false); img.addEventListener('mouseout', function(e) { this.style.border = '1px solid white'; }, false);
// каждую картинку - в отдельную ячейку td = doc.createElement('td'); td.appendChild(img); tr.appendChild(td)
// перенос на новую строку if(++counter == t.smiles_per_line) { table.appendChild(tr);
tr = doc.createElement('tr'); counter = 0; } } table.appendChild(tr);
return table; }
/* * Кнопка для показа таблицы смайликов * */ function createButton(container_id) { var img = doc.createElement('img'); img.src = VkbResources.smile_images['ab.gif']; img.setAttribute('style', 'cursor: pointer;'); img.setAttribute('is_smile_button', true); img.setAttribute('container_id', container_id);
var div = doc.createElement('div'); div.appendChild(img); return div; }
// одна таблица на страницу if(!doc.getElementById('vkbutton_smiles_table')) { doc.body.appendChild(createSmileTable()); doc.addEventListener('click', docClickHandler, false); }
if(container.getAttribute('has_smile_table')) return;
var button = createButton(container.getAttribute('id')); /* * При вставке кнопки почему-то исчезает значение поля редактирования. * Поэтому сохраняем значение и после вставки кнопки восстаналиваем его. */ container.setAttribute('has_smile_table', true); var value = container.getAttribute('value'); container.parentNode.insertBefore(button, container); container.setAttribute('value', value);
},
/* * Возвращает список контейнеров для смайликов на данной странице */ findContainers: function(doc) { return doc.getElementsByTagName('textarea'); },
/* * Добавляет таблицу смайликов и сами смайлы на страницу * */ addToPage: function(doc) { if(!VkButton.getPref('smiles') || doc.location.href.indexOf('im.php') >= 0) return;
this.render(doc); var containers = this.findContainers(doc); var replyField = doc.getElementById('replyField'); for(i = 0; i < containers.length; i++) { if (containers[i]) { /* * Не обрабатывать заглушку для отправки ответного сообщения во мнениях */ if(replyField && containers[i].getAttribute('id') == 'reply_area') continue; this.createBar(doc, containers[i]); } } } };
|
Я хочу этот скрипт встроить в программу и что бы всё делалось программно! Что бы при нажатии на кнопку вконтакте появились смайлы! вот вся суть!  |