Permalink
Browse files

ENHANCEMENT: Add SSMacron plugin for inserting macron characters

git-svn-id: http://svn.silverstripe.com/open/modules/jsparty/branches/2.3@76847 467b73ca-7a2a-4603-9d3b-597d59a354a9
  • Loading branch information...
1 parent 77e4823 commit c3ea86d0d05deb04349d5dac9884ce52ad0a751e Hamish Friedlander committed May 14, 2009
@@ -0,0 +1,40 @@
+(function() {
+ var each = tinymce.each;
+
+ tinymce.create('tinymce.plugins.InsertMacron', {
+ getInfo : function() {
+ return {
+ longname : 'Button to insert macrons',
+ author : 'Hamish Friedlander. Heavily based on charmap that comes with TinyMCE',
+ authorurl : 'http://www.siverstripe.com/',
+ infourl : 'http://www.silverstripe.com/',
+ version : "1.0"
+ };
+ },
+
+
+ init : function(ed, url) {
+ // Register commands
+ ed.addCommand('mceInsertMacron', function() {
+ ed.windowManager.open({
+ file : url + '/macron.htm',
+ width : 350 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)),
+ height : 150 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)),
+ inline : true
+ }, {
+ plugin_url : url
+ });
+ });
+
+ // Register buttons
+ ed.addButton('ssmacron', {
+ title : 'Insert a Macron',
+ cmd : 'mceInsertMacron',
+ image : url + '/img/macron.png'
+ });
+ }
+ });
+
+ // Adds the plugin class to the list of available TinyMCE plugins
+ tinymce.PluginManager.add("../../tinymce_ssmacron", tinymce.plugins.InsertMacron);
+})();
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@@ -0,0 +1,71 @@
+tinyMCEPopup.requireLangPack();
+
+var charmap = [
+ ['Ā', 'Ā', true, 'A - macron'],
+ ['Ē', 'Ē', true, 'E - macron'],
+ ['Ī', 'Ī', true, 'I - macron'],
+ ['Ō', 'Ō', true, 'O - macron'],
+ ['Ū', 'Ū', true, 'U - macron'],
+ ['ā', 'ā', true, 'a - macron'],
+ ['ē', 'ē', true, 'e - macron'],
+ ['ī', 'ī', true, 'i - macron'],
+ ['ō', 'ō', true, 'o - macron'],
+ ['ū', 'ū', true, 'u - macron']
+];
+
+tinyMCEPopup.onInit.add(function() {
+ tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML());
+});
+
+function renderCharMapHTML() {
+ var charsPerRow = 5, tdWidth=20, tdHeight=20, i;
+ var html = '<table border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) + '"><tr height="' + tdHeight + '">';
+ var cols=-1;
+
+ for (i=0; i<charmap.length; i++) {
+ if (charmap[i][2]==true) {
+ cols++;
+ html += ''
+ + '<td class="charmap">'
+ + '<a onmouseover="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" onfocus="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'
+ + charmap[i][1]
+ + '</a></td>';
+ if ((cols+1) % charsPerRow == 0)
+ html += '</tr><tr height="' + tdHeight + '">';
+ }
+ }
+
+ if (cols % charsPerRow > 0) {
+ var padd = charsPerRow - (cols % charsPerRow);
+ for (var i=0; i<padd-1; i++)
+ html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap">&nbsp;</td>';
+ }
+
+ html += '</tr></table>';
+
+ return html;
+}
+
+function insertChar(chr) {
+ tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');
+
+ // Refocus in window
+ if (tinyMCEPopup.isWindow)
+ window.focus();
+
+ tinyMCEPopup.editor.focus();
+ tinyMCEPopup.close();
+}
+
+function previewChar(codeA, codeB, codeN) {
+ var elmV = document.getElementById('codeV');
+ var elmN = document.getElementById('codeN');
+
+ if (codeA=='#160;') {
+ elmV.innerHTML = '__';
+ } else {
+ elmV.innerHTML = '&' + codeA;
+ }
+
+ elmN.innerHTML = codeN;
+}
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Insert a Macron</title>
+ <script type="text/javascript" src="../tiny_mce2/tiny_mce_popup.js"></script>
+ <script type="text/javascript" src="js/macron.js"></script>
+</head>
+<body id="charmap" style="display:none">
+<table align="center" border="0" cellspacing="0" cellpadding="2">
+ <tr>
+ <td colspan="2" class="title">Insert a Macron</td>
+ </tr>
+ <tr>
+ <td id="charmapView" align="left" valign="top">
+ <!-- Chars will be rendered here -->
+ </td>
+ <td width="100" align="center" valign="top">
+ <table border="0" cellpadding="0" cellspacing="0" width="100" style="height:100px">
+ <tr>
+ <td id="codeV">&nbsp;</td>
+ </tr>
+ <tr>
+ <td id="codeN">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+
+</body>
+</html>

0 comments on commit c3ea86d

Please sign in to comment.