blob: 9e1f403fc1b1fa438d25ac029c1bcf02e3181be8 [file] [log] [blame]
function InsertAnchor(editor) {
this.editor = editor;
var cfg = editor.config;
var self = this;
this.placeholderImg = '<img class="IA_placeholder" src="'+Xinha.getPluginDir("InsertAnchor")+'/img/insert-anchor.gif" />';
// register the toolbar buttons provided by this plugin
cfg.registerButton({
id : "insert-anchor",
tooltip : this._lc("Insert Anchor"),
image : editor.imgURL("insert-anchor.gif", "InsertAnchor"),
textMode : false,
action : function() {
self.show();
}
});
cfg.addToolbarElement("insert-anchor", "createlink", 1);
}
InsertAnchor._pluginInfo = {
name : "InsertAnchor",
origin : "version: 1.0, by Andre Rabold, MR Printware GmbH, http://www.mr-printware.de",
version : "2.0",
developer : "Udo Schmal",
developer_url : "http://www.schaffrath-neuemedien.de",
c_owner : "Udo Schmal",
sponsor : "L.N.Schaffrath NeueMedien",
sponsor_url : "http://www.schaffrath-neuemedien.de",
license : "htmlArea"
};
InsertAnchor.prototype._lc = function(string) {
return Xinha._lc(string, 'InsertAnchor');
};
InsertAnchor.prototype.onGenerate = function() {
this.editor.addEditorStylesheet(Xinha.getPluginDir("InsertAnchor") + '/insert-anchor.css');
};
InsertAnchor.prototype.inwardHtml = function(html)
{
html= html.replace(/(<a[^>]*class="anchor"[^>]*>)/g,"$1"+this.placeholderImg);
return html;
}
InsertAnchor.prototype.outwardHtml = function(html)
{
html= html.replace(/(<img[^>]*class="?IA_placeholder"?[^>]*>)/ig,"");
return html;
}
InsertAnchor.prototype.onGenerateOnce = function()
{
this._prepareDialog();
};
InsertAnchor.prototype._prepareDialog = function()
{
var self = this;
var editor = this.editor;
if(!this.html)
{
Xinha._getback(Xinha.getPluginDir("InsertAnchor") + '/dialog.html', function(getback) { self.html = getback; self._prepareDialog(); });
return;
}
// Now we have everything we need, so we can build the dialog.
this.dialog = new Xinha.Dialog(editor, this.html, 'InsertAnchor',{width:400});
this.dialog.getElementById('ok').onclick = function() {self.apply();}
this.dialog.getElementById('cancel').onclick = function() { self.dialog.hide()};
this.ready = true;
};
InsertAnchor.prototype.show = function()
{
if(!this.ready) // if the user is too fast clicking the, we have to make them wait
{
var self = this;
window.setTimeout(function() {self.show();},100);
return;
}
var editor = this.editor;
this.selectedHTML = editor.getSelectedHTML();
var sel = editor.getSelection();
this.range = editor.createRange(sel);
this.a = editor.activeElement(sel);
if(!(this.a != null && this.a.tagName.toLowerCase() == 'a'))
{
this.a = editor._getFirstAncestor(sel, 'a');
}
this.dialog.getElementById('warning').style.display = 'none';
if (this.a != null && this.a.tagName.toLowerCase() == 'a')
{
inputs = { name : this.a.id };
}
else
{
if(!this.editor.selectionEmpty(sel))
{
this.dialog.getElementById('warning').style.display = '';
}
inputs = { name : '' };
}
this.dialog.show(inputs);
this.dialog.getElementById("name").focus();
};
InsertAnchor.prototype.apply = function ()
{
var editor = this.editor;
var param = this.dialog.hide();
var anchor = param['name'];
var a = this.a;
var self = this;
if (anchor == "" || anchor == null)
{
if (a)
{
var child = self.outwardHtml(a.innerHTML);
a.parentNode.removeChild(a);
editor.insertHTML(child);
}
return;
}
try
{
var doc = editor._doc;
if (!a)
{
a = doc.createElement("a");
a.id = anchor;
a.name = anchor;
a.title = anchor;
a.className = "anchor";
a.innerHTML = self.placeholderImg;
// var html = editor.getSelectedHTML();
// if (html) a.innerHTML += html;
if (Xinha.is_ie)
{
this.range.pasteHTML(a.outerHTML);
}
else
{
editor.insertNodeAtSelection(a);
}
}
else
{
a.id = anchor;
a.name = anchor;
a.title = anchor;
a.className = "anchor";
}
}
catch (e) { }
}