Tuesday 2 August 2016

php - GWT TinyMCE spellchecking



I'm trying to get a GWT application up and running with TinyMCE and spell checking. I want to have inline highlighting for incorrectly spelled words and a button to do spell checking. I've tried both iespell and spellchecker with poor results. Here are the steps I've followed so far

1. Downloaded newest GWT with Eclipse Indigo

2. Downloaded GWT TinyMCE plugin http://code.google.com/p/tinymce-gwt/wiki/Tutorial


3. Downloaded latest TinyMCE

4. Downloaded the latest SpellChecker http://www.tinymce.com/wiki.php/Plugin:spellchecker

5. Replaced the tiny_mce_editor directory in the jar directory I downloaded in step 2 with step 3.

6. Replaced the tiny_mce_editor\plugins\spellchecker directory with the directory I downloaded in step 4.

7. Generated the following code for GWT.



package com.test.reporting.client;

import gr.open.client.TinyMCE;
import com.google.gwt.core.client.EntryPoint;

import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;

/**
* Entry point classes define onModuleLoad().
*/
public class Reporting implements EntryPoint {
private TinyMCE tinyMCEEditor = new TinyMCE();

private final VerticalPanel verticalPanel = new VerticalPanel();

/**
* This is the entry point method.
*/
public void onModuleLoad() {

// Add the nameField and sendButton to the RootPanel
// Use RootPanel.get() to get the entire body element
RootPanel rootPanel = RootPanel.get();
String[] plugins = tinyMCEEditor.getConfig().getPlugins().split(", ");
String[] newPlugins = new String[plugins.length+1];

System.arraycopy(plugins, 0, newPlugins, 0, plugins.length);
newPlugins[plugins.length] = "spellchecker";

tinyMCEEditor.getConfig().setPlugins(newPlugins);
tinyMCEEditor.getConfig().setThemeAdvancedButtons3(new String[]{"spellchecker","iespell"});

rootPanel.add(verticalPanel, 0, 0);
verticalPanel.add(tinyMCEEditor);
}
}



Now when I use this in Chrome or Firefox the inline spelling doesn't work, and the spell check icon gives a very long error reproduced at the end of this question. In Internet Explorer the iespell icon comes up but doesn't do anything other than ask to install iespell. However, when I change



tinyMCEEditor.getConfig().setThemeAdvancedButtons3(new String[]{"spellchecker","iespell"});


to



tinyMCEEditor.getConfig().setThemeAdvancedButtons3(new String[]{"iespell"});



In both Chrome and Firefox, inline spell checking now works, but the whole toolbar associated with TinyMCE disappears.



Can anyone help me figure out both of my problems?



Thanks




  • Long PHP error

    Error response: ?php
    /** * $Id: rpc.php 915 2008-09-03 08:45:28Z spocke $ * * @package MCManager.includes * @author Moxiecode * @copyright Copyright � 2004-2007, Moxiecode Systems AB, All rights reserved. */ require_once("./includes/general.php"); // Set RPC response headers header('Content-Type: text/plain'); header('Content-Encoding: UTF-8'); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); $raw = ""; // Try param if (isset($_POST["json_data"])) $raw = getRequestParam("json_data"); // Try globals array if (!$raw && isset($_GLOBALS) && isset($_GLOBALS["HTTP_RAW_POST_DATA"])) $raw = $_GLOBALS["HTTP_RAW_POST_DATA"]; // Try globals variable if (!$raw && isset($HTTP_RAW_POST_DATA)) $raw = $HTTP_RAW_POST_DATA; // Try stream if (!$raw) { if (!function_exists('file_get_contents')) { $fp = fopen("php://input", "r"); if ($fp) { $raw = ""; while (!feof($fp)) $raw = fread($fp, 1024); fclose($fp); } } else $raw = "" . file_get_contents("php://input"); } // No input data if (!$raw) die('{"result":null,"id":null,"error":{"errstr":"Could not get raw post data.","errfile":"","errline":null,"errcontext":"","level":"FATAL"}}'); // Passthrough request to remote server if (isset($config['general.remote_rpc_url'])) { $url = parse_url($config['general.remote_rpc_url']); // Setup request $req = "POST " . $url["path"] . " HTTP/1.0\r\n"; $req .= "Connection: close\r\n"; $req .= "Host: " . $url['host'] . "\r\n"; $req .= "Content-Length: " . strlen($raw) . "\r\n"; $req .= "\r\n" . $raw; if (!isset($url['port']) || !$url['port']) $url['port'] = 80; $errno = $errstr = ""; $socket = fsockopen($url['host'], intval($url['port']), $errno, $errstr, 30); if ($socket) { // Send request headers fputs($socket, $req); // Read response headers and data $resp = ""; while (!feof($socket)) $resp .= fgets($socket, 4096); fclose($socket); // Split response header/data $resp = explode("\r\n\r\n", $resp); echo $resp[1]; // Output body } die(); } // Get JSON data $json = new Moxiecode_JSON(); $input = $json->decode($raw); // Execute RPC if (isset($config['general.engine'])) { $spellchecker = new $config'general.engine'; $result = call_user_func_array(array($spellchecker, $input['method']), $input['params']); } else die('{"result":null,"id":null,"error":{"errstr":"You must choose an spellchecker engine in the config.php file.","errfile":"","errline":null,"errcontext":"","level":"FATAL"}}'); // Request and response id should always be the same $output = array( "id" => $input->id, "result" => $result, "error" => null ); // Return JSON encoded string echo $json->encode($output); ?>



Edit:
I have figured out how to get the browser spell checking. You just have to include the gecko_spellcheck element. However I am still lost how to get the TinyMCE spell checker to work.


Answer



There is a tinymce init parameter you need to set in order to get the gecko spellchecker engine activated in tinymces iframe box. You need to set it like this in your init



// This option enables you toggling the internal Gecko/Firefox spellchecker logic. 

// This option is set to false by default and will then remove the spellchecker from TinyMCE.
gecko_spellcheck: true,

No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...