diff options
Diffstat (limited to 'js/dojo/dojox/editor/plugins/SafePaste.js')
| -rw-r--r-- | js/dojo/dojox/editor/plugins/SafePaste.js | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/js/dojo/dojox/editor/plugins/SafePaste.js b/js/dojo/dojox/editor/plugins/SafePaste.js new file mode 100644 index 0000000..c293849 --- /dev/null +++ b/js/dojo/dojox/editor/plugins/SafePaste.js @@ -0,0 +1,116 @@ +//>>built +define("dojox/editor/plugins/SafePaste", [ + "dojo", + "dijit", + "dojox", + "dijit/Dialog", + "dojo/_base/connect", + "dojo/_base/declare", + "dojo/i18n", + "dojo/string", + "dojox/editor/plugins/PasteFromWord", + "dojo/i18n!dojox/editor/plugins/nls/SafePaste", + "dojo/i18n!dijit/nls/common", + "dojo/i18n!dijit/_editor/nls/commands" +], function(dojo, dijit, dojox) { + +dojo.declare("dojox.editor.plugins.SafePaste", [dojox.editor.plugins.PasteFromWord],{ + // summary: + // This plugin extends from the PasteFromWord plugin and provides + // 'safe pasting', meaning that it will not allow keyboard/menu pasting + // into the dijit editor. It still runs all of the word cleanup code, + // including script strippers. If you use this plugin, you don't need to + // use the 'PasteFromWord Plugin' + + _initButton: function(){ + // summary: + // Over-ride the editor paste controls + + // Create instance local copy. + this._filters = this._filters.slice(0); + var strings = dojo.i18n.getLocalization("dojox.editor.plugins", "SafePaste"); + dojo.mixin(strings, dojo.i18n.getLocalization("dijit", "common")); + strings.cancel = strings.buttonCancel; + dojo.mixin(strings, dojo.i18n.getLocalization("dijit._editor", "commands")); + + this._uId = dijit.getUniqueId(this.editor.id); + + strings.uId = this._uId; + strings.width = this.width || "400px"; + strings.height = this.height || "300px"; + + this._dialog = new dijit.Dialog({title: strings["paste"]}).placeAt(dojo.body()); + this._dialog.set("content", dojo.string.substitute(this._template, strings)); + + // Make it translucent so we can fade in the window when the RTE is created. + // the RTE has to be created 'visible, and this is a ncie trick to make the creation + // 'pretty'. + dojo.style(dojo.byId(this._uId + "_rte"), "opacity", 0.001); + + // Link up the action buttons to perform the insert or cleanup. + this.connect(dijit.byId(this._uId + "_paste"), "onClick", "_paste"); + this.connect(dijit.byId(this._uId + "_cancel"), "onClick", "_cancel"); + this.connect(this._dialog, "onHide", "_clearDialog"); + + // Create regular expressions for sripping out user-specified tags and register + // them with the filters. + dojo.forEach(this.stripTags, function(tag){ + var tagName = tag + ""; + var rxStartTag = new RegExp("<\\s*" + tagName + "[^>]*>", "igm"); + var rxEndTag = new RegExp("<\\\\?\\/\\s*" + tagName + "\\s*>", "igm"); + this._filters.push({regexp: + rxStartTag, + handler: "" + }); + this._filters.push({regexp: + rxEndTag, + handler: "" + }); + }, this); + }, + + updateState: function(){ + // summary: + // Overrides _Plugin.updateState(). + // tags: + // protected + // Do nothing. + }, + + setEditor: function(editor){ + // summary: + // Over-ride for the setting of the editor. + // editor: Object + // The editor to configure for this plugin to use. + this.editor = editor; + this._initButton(); + this.editor.onLoadDeferred.addCallback(dojo.hitch(this, function(){ + var spFunc = dojo.hitch(this, function(e){ + if(e){ + dojo.stopEvent(e); + } + this._openDialog(); + return true; + }); + this.connect(this.editor.editNode, "onpaste", spFunc); + this.editor._pasteImpl = spFunc; + })); + } +}); + +// Register this plugin. +dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){ + if(o.plugin){ return; } + var name = o.args.name.toLowerCase(); + if(name === "safepaste"){ + o.plugin = new dojox.editor.plugins.SafePaste({ + width: (o.args.hasOwnProperty("width"))?o.args.width:"400px", + height: (o.args.hasOwnProperty("height"))?o.args.width:"300px", + stripTags: (o.args.hasOwnProperty("stripTags"))?o.args.stripTags:null + }); + } +}); + +return dojox.editor.plugins.SafePaste; + +}); |
