c1f7954a6bd28713df86930fe74043de6857c2d6
[moodle.git] / lib / editor / tinymce / tiny_mce / 3.3.9.2 / plugins / moodleemoticon / editor_plugin_src.js
1 /**
2  * TinyMCE plugin MoodleEmoticon - provides GUI to insert emoticon images
3  *
4  * Based on the example plugin (c) 2009 Moxiecode Systems AB
5  *
6  * @author  David Mudrak <david@moodle.com>
7  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
8  */
10 (function() {
11     tinymce.create('tinymce.plugins.MoodleEmoticon', {
13         /**
14          * Holds the list of emoticons provided by emoticon_manager
15          *
16          * @private
17          */
18         _emoticons : {},
20         /**
21          * Initializes the plugin, this will be executed after the plugin has been created.
22          * This call is done before the editor instance has finished it's initialization so use the onInit event
23          * of the editor instance to intercept that event.
24          *
25          * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
26          * @param {string} url Absolute URL to where the plugin is located.
27          */
28         init : function(ed, url) {
29             // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceMoodleEmoticon');
30             ed.addCommand('mceMoodleEmoticon', function() {
31                 lang = ed.getParam('language');
32                 ed.windowManager.open({
33                     file : url + '/dialog.php?lang=' + lang ,
34                     width : 250 + parseInt(ed.getLang('moodleemoticon.delta_width', 0)),
35                     height : 400 + parseInt(ed.getLang('moodleemoticon.delta_height', 0)),
36                     inline : 1
37                 }, {
38                     plugin_url : url, // Plugin absolute URL
39                 });
40             });
42             // Add an observer to the onInit event to convert emoticon texts to images
43             ed.onInit.add(function(ed) {
44                 var data = ed.getContent();
45                 this._emoticons = tinymce.util.JSON.parse(ed.getParam('moodleemoticon_emoticons'));
46                 for (var emotxt in this._emoticons) {
47                     data = data.replace(emotxt, this._emoticons[emotxt]);
48                 }
49                 ed.setContent(data);
50             });
52             // Add an observer to the onPreProcess event to convert emoticon images to texts
53             ed.onPreProcess.add(function(ed, o) {
54                 if (o.save) {
55                     tinymce.each(ed.dom.select('img.emoticon', o.node), function(image) {
56                         var emoticontxt = '';
57                         var matches = /^emoticon emoticon-index-([0-9]+)$/.exec(image.className);
58                         if (matches.length != 2) {
59                             // this is not valid emoticon image inserted via dialog
60                             // return true so that each() does not halt
61                             return true;
62                         }
63                         var index = matches[1];
64                         var search = new RegExp('class="emoticon emoticon-index-'.concat(index, '"'));
65                         for (var emotxt in this._emoticons) {
66                             if (search.test(this._emoticons[emotxt])) {
67                                 emoticontxt = emotxt;
68                                 break;
69                             }
70                         }
71                         if (emoticontxt) {
72                             ed.dom.setOuterHTML(image, emoticontxt);
73                         }
74                     }, this);
75                 }
76             });
78             // Register moodleemoticon button
79             ed.addButton('moodleemoticon', {
80                 title : 'moodleemoticon.desc',
81                 cmd : 'mceMoodleEmoticon',
82                 image : url + '/img/moodleemoticon.gif'
83             });
84         },
86         /**
87          * Creates control instances based in the incomming name. This method is normally not
88          * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons
89          * but you sometimes need to create more complex controls like listboxes, split buttons etc then this
90          * method can be used to create those.
91          *
92          * @param {String} n Name of the control to create.
93          * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control.
94          * @return {tinymce.ui.Control} New control instance or null if no control was created.
95          */
96         createControl : function(n, cm) {
97             return null;
98         },
100         /**
101          * Returns information about the plugin as a name/value array.
102          * The current keys are longname, author, authorurl, infourl and version.
103          *
104          * @return {Object} Name/value array containing information about the plugin.
105          */
106         getInfo : function() {
107             return {
108                 longname : 'Moodle Emoticon plugin',
109                 author : 'David Mudrak',
110                 authorurl : 'http://mudrak.name',
111                 infourl : 'http://moodle.org',
112                 version : "1.0"
113             };
114         }
115     });
117     // Register plugin
118     tinymce.PluginManager.add('moodleemoticon', tinymce.plugins.MoodleEmoticon);
119 })();