Index: lams_central/src/java/org/lamsfoundation/lams/web/JlatexmathServlet.java =================================================================== diff -u -r72eb0baec4a51699c179e9ff3df6954d6a216245 -r8dea32417ce47e6622021dd543870b298356600b --- lams_central/src/java/org/lamsfoundation/lams/web/JlatexmathServlet.java (.../JlatexmathServlet.java) (revision 72eb0baec4a51699c179e9ff3df6954d6a216245) +++ lams_central/src/java/org/lamsfoundation/lams/web/JlatexmathServlet.java (.../JlatexmathServlet.java) (revision 8dea32417ce47e6622021dd543870b298356600b) @@ -23,9 +23,10 @@ /* $Id$ */ package org.lamsfoundation.lams.web; +import java.awt.AlphaComposite; +import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; -import java.io.InputStream; import java.io.OutputStream; import javax.imageio.ImageIO; @@ -36,11 +37,7 @@ import javax.swing.JLabel; import org.apache.commons.lang.StringUtils; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; import org.lamsfoundation.lams.util.WebUtil; -import org.lamsfoundation.lams.web.action.LamsDispatchAction; import org.scilab.forge.jlatexmath.TeXConstants; import org.scilab.forge.jlatexmath.TeXFormula; import org.scilab.forge.jlatexmath.TeXIcon; @@ -61,21 +58,31 @@ return; } + Integer fontSize = WebUtil.readIntParam(request, "fontSize", true); + if (fontSize == null) { + fontSize = 20; + } + TeXFormula formula = new TeXFormula(formulaParam); TeXIcon icon = formula.new TeXIconBuilder().setStyle(TeXConstants.STYLE_DISPLAY) - .setSize(40) + .setSize(fontSize) .setWidth(TeXConstants.UNIT_PIXEL, 256f, TeXConstants.ALIGN_CENTER) .setIsMaxWidth(true).setInterLineSpacing(TeXConstants.UNIT_PIXEL, 20f) .build(); // TeXFormula fomule = new TeXFormula(formula); // TeXIcon ti = fomule.createTeXIcon(TeXConstants.STYLE_DISPLAY, 40); - BufferedImage b = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_4BYTE_ABGR); + BufferedImage b = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB); +// Color transparent = new Color(0, true); +// ((Graphics2D)b.getGraphics()).setBackground(transparent); +// b.getGraphics().clearRect(0, 0, icon.getIconWidth(), icon.getIconHeight()); + + ((Graphics2D)b.getGraphics()).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5F)); icon.paintIcon(new JLabel(), b.getGraphics(), 0, 0); - response.setContentType("image/jpeg"); + response.setContentType("image/png"); OutputStream out = response.getOutputStream(); - ImageIO.write(b, "jpg", out); + ImageIO.write(b, "png", out); out.close(); } Index: lams_central/web/ckeditor/ckeditor.js =================================================================== diff -u -rb9999690450e2a6e5730a765d39eb36da5c381b7 -r8dea32417ce47e6622021dd543870b298356600b --- lams_central/web/ckeditor/ckeditor.js (.../ckeditor.js) (revision b9999690450e2a6e5730a765d39eb36da5c381b7) +++ lams_central/web/ckeditor/ckeditor.js (.../ckeditor.js) (revision 8dea32417ce47e6622021dd543870b298356600b) @@ -734,7 +734,7 @@ focus:function(){this._.isLoadingData?this._.isPendingFocus=!0:j.baseProto.focus.call(this)},detach:function(){var a=this.editor,d=a.document,a=a.window.getFrame();j.baseProto.detach.call(this);this.clearCustomData();d.getDocumentElement().clearCustomData();/*LAMS*/if(a){a.clearCustomData()};CKEDITOR.tools.removeFunction(this._.frameLoadedHandler);/*LAMS*/if(a){(d=a.removeCustomData("onResize"))&&d.removeListener();a.remove()}}}})})();CKEDITOR.config.disableObjectResizing=!1;CKEDITOR.config.disableNativeTableHandles=!0; CKEDITOR.config.disableNativeSpellChecker=!0;CKEDITOR.config.contentsCss=CKEDITOR.getUrl("contents.css");(function(){function e(b,a){a||(a=b.getSelection().getSelectedElement());if(a&&a.is("img")&&!a.data("cke-realelement")&&!a.isReadOnly())return a}function f(b){var a=b.getStyle("float");if("inherit"==a||"none"==a)a=0;a||(a=b.getAttribute("align"));return a}CKEDITOR.plugins.add("image",{requires:"dialog",init:function(b){if(!b.plugins.image2){CKEDITOR.dialog.add("image",this.path+"dialogs/image.js");var a="img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}"; CKEDITOR.dialog.isTabEnabled(b,"image","advanced")&&(a="img[alt,dir,id,lang,longdesc,!src,title]{*}(*)");b.addCommand("image",new CKEDITOR.dialogCommand("image",{allowedContent:a,requiredContent:"img[alt,src]",contentTransformations:[["img{width}: sizeToStyle","img[width]: sizeToAttribute"],["img{float}: alignmentToStyle","img[align]: alignmentToAttribute"]]}));b.ui.addButton&&b.ui.addButton("Image",{label:b.lang.common.image,command:"image",toolbar:"insert,10"});b.on("doubleclick",function(b){var a= -b.data.element;a.is("img")&&(!a.data("cke-realelement")&&!a.isReadOnly())&&(b.data.dialog="image")});b.addMenuItems&&b.addMenuItems({image:{label:b.lang.image.menu,command:"image",group:"image"}});b.contextMenu&&b.contextMenu.addListener(function(a){if(e(b,a))return{image:CKEDITOR.TRISTATE_OFF}})}},afterInit:function(b){function a(a){var d=b.getCommand("justify"+a);if(d){if("left"==a||"right"==a)d.on("exec",function(d){var c=e(b),g;c&&(g=f(c),g==a?(c.removeStyle("float"),a==f(c)&&c.removeAttribute("align")): +b.data.element;a.is("img")&&!a.data("jlatexmath")&&(!a.data("cke-realelement")&&!a.isReadOnly())&&(b.data.dialog="image")});b.addMenuItems&&b.addMenuItems({image:{label:b.lang.image.menu,command:"image",group:"image"}});b.contextMenu&&b.contextMenu.addListener(function(a){if(e(b,a))return{image:CKEDITOR.TRISTATE_OFF}})}},afterInit:function(b){function a(a){var d=b.getCommand("justify"+a);if(d){if("left"==a||"right"==a)d.on("exec",function(d){var c=e(b),g;c&&(g=f(c),g==a?(c.removeStyle("float"),a==f(c)&&c.removeAttribute("align")): c.setStyle("float",a),d.cancel())});d.on("refresh",function(d){var c=e(b);c&&(c=f(c),this.setState(c==a?CKEDITOR.TRISTATE_ON:"right"==a||"left"==a?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),d.cancel())})}}b.plugins.image2||(a("left"),a("right"),a("center"),a("block"))}})})();CKEDITOR.config.image_removeLinkByEmptyURL=!0;(function(){function k(a,b){var e,f;b.on("refresh",function(a){var b=[i],c;for(c in a.data.states)b.push(a.data.states[c]);this.setState(CKEDITOR.tools.search(b,m)?m:i)},b,null,100);b.on("exec",function(b){e=a.getSelection();f=e.createBookmarks(1);b.data||(b.data={});b.data.done=!1},b,null,0);b.on("exec",function(){a.forceNextSelectionCheck();e.selectBookmarks(f)},b,null,100)}var i=CKEDITOR.TRISTATE_DISABLED,m=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indent",{init:function(a){var b=CKEDITOR.plugins.indent.genericDefinition; k(a,a.addCommand("indent",new b(!0)));k(a,a.addCommand("outdent",new b));a.ui.addButton&&(a.ui.addButton("Indent",{label:a.lang.indent.indent,command:"indent",directional:!0,toolbar:"indent,20"}),a.ui.addButton("Outdent",{label:a.lang.indent.outdent,command:"outdent",directional:!0,toolbar:"indent,10"}));a.on("dirChanged",function(b){var f=a.createRange(),j=b.data.node;f.setStartBefore(j);f.setEndAfter(j);for(var l=new CKEDITOR.dom.walker(f),c;c=l.next();)if(c.type==CKEDITOR.NODE_ELEMENT)if(!c.equals(j)&& c.getDirection()){f.setStartAfter(c);l=new CKEDITOR.dom.walker(f)}else{var d=a.config.indentClasses;if(d)for(var g=b.data.dir=="ltr"?["_rtl",""]:["","_rtl"],h=0;h <%@ taglib uri="tags-core" prefix="c"%> +<%=Configuration.get(ConfigurationKeys.SERVER_URL_CONTEXT_PATH)%> + @@ -16,14 +18,14 @@ var CKEDITOR = window.parent.CKEDITOR; var thisDialog = CKEDITOR.dialog.getCurrent(); var CK = thisDialog.getParentEditor(); + var SERVER_URL_CONTEXT_PATH = '/${SERVER_URL_CONTEXT_PATH}/servlet/jlatexmath'; /** Initial setup */ window.onload = function() { // Translate dialog box - //document.getElementById("MoviePlayerURL").firstChild.data = CK.lang.jlatexmath.MoviePlayerURL; - //document.getElementById("MoviePlayerURLDesc").firstChild.data = CK.lang.jlatexmath.MoviePlayerURLDesc; - //document.getElementById("button-preview").value = CK.lang.jlatexmath.JlatexmathPreview; + document.getElementById("JlatexmathLatexFormula").innerHTML = CK.lang.jlatexmath.JlatexmathLatexFormula; + document.getElementById("JlatexmathFontSize").innerHTML = CK.lang.jlatexmath.JlatexmathFontSize; // remove our previously registered listeners and reregister a new one var okButton = thisDialog.getButton('ok'); @@ -37,43 +39,46 @@ okButton._.events.click.listeners = newListeners; okButton.on('click', triggerOK, null, null, 1); - // - //var formulaTextarea = document.getElementById('latex-formula'); - //formulaTextarea.on('change', formulaTextareaChanged, null, null, 1); - // Load selected latex formula loadLatexFormulaSelection(); } /** Changing preview image on the fly */ - function formulaTextareaChanged(ev) { + function formulaTextareaChanged() { - if(document.getElementById('latex-formula').value.length == 0) { + var latexFormula = document.getElementById('latex-formula').value; + if(latexFormula.length == 0) { return; } - var latexFormula = document.getElementById('latex-formula').value; - - document.getElementById('preview').src = '/servlet/jlatexmath?formula=' + encodeURIComponent(latexFormula); + var fontSize = document.getElementById('font-size').value; + document.getElementById('preview').src = SERVER_URL_CONTEXT_PATH + '?formula=' + encodeURIComponent(latexFormula) + "&fontSize=" + fontSize; } + + function getParameterByName(string, name) { + var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), + results = regex.exec(string); + return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); + } /** Load FCKEditor selection */ function loadLatexFormulaSelection() { var oSel = CK.getSelection().getSelectedElement(); - if (oSel != null) { + if (oSel != null && oSel.is('img')) { - var realElementHtml = oSel.getAttribute('_cke_realelement'); - if (realElementHtml != 'undefined'){ - realElementHtml = decodeURIComponent(realElementHtml); - realElementHtml = realElementHtml.replace(/cke:/g,''); - oSel = CKEDITOR.dom.element.createFromHtml(realElementHtml, thisDialog.document); + var imageSrc = oSel.getAttribute('src'); + if (imageSrc != 'undefined') { + + var formula = getParameterByName(imageSrc, 'formula'); + var fontSize = getParameterByName(imageSrc, 'fontSize'); + + // Read current settings (existing movie) + document.getElementById('latex-formula').value = formula; + document.getElementById('font-size').value = fontSize; } - // Read current settings (existing movie) - document.getElementById('latex-formula').value = oSel.url; - } } @@ -83,7 +88,6 @@ if(document.getElementById('latex-formula').value.length == 0) { document.getElementById('latex-formula').focus(); - // window.parent.SetSelectedTab('Info'); alert(CK.lang.jlatexmath.JlatexmathNoFormula) ; ev.stop(); return; @@ -92,9 +96,11 @@ CK.fire('saveSnapshot', null, CK); var latexFormula = document.getElementById('latex-formula').value; + var fontSize = document.getElementById('font-size').value; // Flash video (FLV) - var resultHtml = ' - +
- + + + + - - + - + +
- Please, enter latex formula: + +
+ onkeyup="formulaTextareaChanged()" + onChange="formulaTextareaChanged()" + onpaste="formulaTextareaChanged()" + oncut="formulaTextareaChanged()">
+ + +
+
-
Index: lams_central/web/ckeditor/plugins/jlatexmath/lang/en.js =================================================================== diff -u -r72eb0baec4a51699c179e9ff3df6954d6a216245 -r8dea32417ce47e6622021dd543870b298356600b --- lams_central/web/ckeditor/plugins/jlatexmath/lang/en.js (.../en.js) (revision 72eb0baec4a51699c179e9ff3df6954d6a216245) +++ lams_central/web/ckeditor/plugins/jlatexmath/lang/en.js (.../en.js) (revision 8dea32417ce47e6622021dd543870b298356600b) @@ -1,17 +1,13 @@ CKEDITOR.plugins.setLang( 'jlatexmath', 'en', { // Toolbar button JlatexmathBtn : 'JLaTeXMath', - JlatexmathTooltip : 'Insert/Edit Movies or Audio', + JlatexmathTooltip : 'Insert/Edit Latex formulas', // Dialog DlgJlatexmathTitle : 'JLaTeXMath', - JlatexmathURL : 'URL:', - JlatexmathURLDesc : 'Select a .avi, .flv, .mov, .mp3, .mp4, .mpv, .wma, .wmv file or youtube URL', - JlatexmathWidth : 'Width:', - JlatexmathHeight : 'Height:', - JlatexmathAutoplay : 'Auto Play:', - JlatexmathPreview : 'Preview', + JlatexmathFontSize : 'Font Size', + JlatexmathLatexFormula : 'Please, enter latex formula:', // Dialog errors - JlatexmathNoFormula : 'Please specify a latex formula.' + JlatexmathNoFormula : 'Please, enter a latex formula.' }); Index: lams_central/web/ckeditor/plugins/jlatexmath/plugin.js =================================================================== diff -u -r72eb0baec4a51699c179e9ff3df6954d6a216245 -r8dea32417ce47e6622021dd543870b298356600b --- lams_central/web/ckeditor/plugins/jlatexmath/plugin.js (.../plugin.js) (revision 72eb0baec4a51699c179e9ff3df6954d6a216245) +++ lams_central/web/ckeditor/plugins/jlatexmath/plugin.js (.../plugin.js) (revision 8dea32417ce47e6622021dd543870b298356600b) @@ -33,6 +33,27 @@ pluginPath + 'jlatexmath.jsp', 450, 260 - ); + ); + + editor.on( + 'doubleclick', + function(evt) { + var element = evt.data.element; + if (element && element.is('img')) { + + var sName = element.getAttribute('src').match( /jlatexmath\?formula(.*)/ ); + if (sName!=null) { + evt.data.dialog = 'Jlatexmath'; + + evt.cancelBubble = true; + evt.returnValue = false; + } + } + }, + null, + null, + 1 + ); + } }); \ No newline at end of file