Подскажите пожалуйста как сделать модуль для коррекции ошибок на сайте, в js не сильна, но есть уже работающий модуль для движка Drupal, а я хочу сделать аналог, только для обычного php сайта. Моя идея такова, что нужен код js, который при нажатии Ctrl+Enter будет просто открывать форму, и добавлять в поле формы кусочек выделенного элемента, и в общем то все, форма передает данные на сервер и посылается уведомление на почту. Из модуля для drupal я вытащила js код, но как его переписать для обычного сайт не могу понять. Код (Text): // $Id: spelling.js,v 1.1.2.1 2009/04/21 15:07:24 doq Exp $ var spelling = spelling || {}; spelling.autoAttach = function () { new spelling.handler(); // Show functionality description block. var isKonqueror = -1 != navigator.userAgent.indexOf('Konqueror'); if (isKonqueror) { // Workaround for Konqueror browser. Tested under Konqueror 3.5. document.getElementById('block-spelling-0').style.display = 'block'; } else { $('#block-spelling-0').show(); } } spelling.handler = function () { var obj = this; this.input = $(document); $(this.input) .keydown(function (event) { return obj.onkeydown(event) }); }; spelling.handler.prototype.onkeydown = function (e) { if (!e) { e = window.event; } // Enter and Ctrl. if (13 == e.keyCode && e.ctrlKey) { var selection = (parent.getSelection) ? parent.getSelection() : ((parent.document.getSelection) ? parent.document.getSelection() : ((document.selection.createRange) ? document.selection.createRange().text : null)); if (!selection || '' == selection) { // TODO I think there should be some error handling if browser doesn't support text selection. alert(Drupal.t("You haven't selected any text.")); return; } else { if (confirm(Drupal.t('Are you sure you want to report the text with mistake below to the site administrator?') + "\n\n" + selection)) { // When doing a post request, you need non-null data. Otherwise a // HTTP 411 or HTTP 406 (with Apache mod_security) error may result. $.ajax({ type: "POST", url: Drupal.settings.spelling['uri'], data: 'text=' + Drupal.encodeURIComponent(selection) + '&uri=' + Drupal.encodeURIComponent(Drupal.settings.spelling['requestUri']), success: function (data) { // Parse response. var progress = Drupal.parseJson(data); // Display errors. if (progress.status == 0) { alert(Drupal.t('Site administrator was successfully notified about spelling mistake.')); return; } }, error: function (xmlhttp) { alert(Drupal.t('Spelling mistake notification failed.')); } }); } } } } // Global killswitch. if (Drupal.jsEnabled) { $(document).ready(spelling.autoAttach); } [/code]
Вроде работает. Правда выглядит не очень, стандартные диалоговые окна выводит, я где-то видел поприятнее интерфейс Сервер, php: Код (Text): <?php require_once('../scripts/main.php'); $hFile = @fopen('spcheck.txt', 'w'); if (!$hFile) { echo "{\"status\":\"1\"}"; return; } if ($_SERVER['REQUEST_METHOD']=='POST') { $text = urldecode($_POST['text']); $uri = urldecode($_POST['uri']); fwrite( $hFile, "URI: " ); fwrite( $hFile, $uri ); fwrite( $hFile, "\r\n" ); fwrite( $hFile, "TEXT: " ); fwrite( $hFile, $text ); fwrite( $hFile, "\r\n" ); fclose($hFile); echo "{\"status\":\"0\"}"; } ?> Браузер: Код (Text): var spelling = spelling || {}; spelling.autoAttach = function () { new spelling.handler(); // Show functionality description block. var isKonqueror = -1 != navigator.userAgent.indexOf('Konqueror'); if (isKonqueror) { // Workaround for Konqueror browser. Tested under Konqueror 3.5. //document.getElementById('block-spelling-0').style.display = 'block'; } else { //$('#block-spelling-0').show(); } } spelling.handler = function () { var obj = this; this.input = $(document); $(this.input) .keydown(function (event) { return obj.onkeydown(event) }); }; spelling.handler.prototype.onkeydown = function (e) { if (!e) { e = window.event; } // Enter and Ctrl. if (13 == e.keyCode && e.ctrlKey) { var selection = (parent.getSelection) ? parent.getSelection() : ((parent.document.getSelection) ? parent.document.getSelection() : ((document.selection.createRange) ? document.selection.createRange().text : null)); if (!selection || '' == selection) { // TODO I think there should be some error handling if browser doesn't support text selection. //alert(Drupal.t("You haven't selected any text.")); alert("You haven't selected any text."); return; } else { //if (confirm(Drupal.t('Are you sure you want to report the text with mistake below to the site administrator?') + "\n\n" + selection)) { if (confirm('Are you sure you want to report the text with mistake below to the site administrator?' + "\n\nText:\n\"" + selection + "\"")) { // When doing a post request, you need non-null data. Otherwise a // HTTP 411 or HTTP 406 (with Apache mod_security) error may result. $.ajax({ type: "POST", //url: Drupal.settings.spelling['uri'], url: "/spcheck.php", //url: document.location.href //data: 'text=' + Drupal.encodeURIComponent(selection) + '&uri=' + Drupal.encodeURIComponent(Drupal.settings.spelling['requestUri']), data: 'text=' + encodeURIComponent(selection) + '&uri=' + encodeURIComponent(document.location.href), success: function (data) { // Parse response. //var progress = Drupal.parseJson(data); var progress = jQuery.parseJSON(data); // Display errors. if (progress.status == 0) { //alert(Drupal.t('Site administrator was successfully notified about spelling mistake.')); alert('Site administrator was successfully notified about spelling mistake.'); return; } }, error: function (xmlhttp) { //alert(Drupal.t('Spelling mistake notification failed.')); alert('Spelling mistake notification failed.'); } }); } } } } $(document).ready(spelling.autoAttach);