Jonathan Rosenbaum
7 years ago
1 changed files with 113 additions and 0 deletions
@ -0,0 +1,113 @@ |
|||
(function( $ ){ |
|||
|
|||
$.fn.pad = function( options ) { |
|||
var settings = { |
|||
'host' : 'http://beta.etherpad.org', |
|||
'baseUrl' : '/p/', |
|||
'showControls' : false, |
|||
'showChat' : false, |
|||
'showLineNumbers' : false, |
|||
'userName' : 'unnamed', |
|||
'lang' : '', |
|||
'useMonospaceFont' : false, |
|||
'noColors' : false, |
|||
'userColor' : false, |
|||
'hideQRCode' : false, |
|||
'alwaysShowChat' : false, |
|||
'width' : 100, |
|||
'height' : 100, |
|||
'border' : 0, |
|||
'borderStyle' : 'solid', |
|||
'toggleTextOn' : 'Disable Rich-text', |
|||
'toggleTextOff' : 'Enable Rich-text', |
|||
'plugins' : {}, |
|||
'rtl' : false |
|||
}; |
|||
|
|||
var $self = this; |
|||
if (!$self.length) return; |
|||
if (!$self.attr('id')) throw new Error('No "id" attribute'); |
|||
|
|||
var useValue = $self[0].tagName.toLowerCase() == 'textarea'; |
|||
var selfId = $self.attr('id'); |
|||
var epframeId = 'epframe'+ selfId; |
|||
// This writes a new frame if required
|
|||
if ( !options.getContents ) { |
|||
if ( options ) { |
|||
$.extend( settings, options ); |
|||
} |
|||
|
|||
var pluginParams = ''; |
|||
for(var option in settings.plugins) { |
|||
pluginParams += '&' + option + '=' + settings.plugins[option] |
|||
} |
|||
|
|||
var iFrameLink = '<iframe id="'+epframeId; |
|||
iFrameLink = iFrameLink +'" name="' + epframeId; |
|||
iFrameLink = iFrameLink +'" src="' + settings.host+settings.baseUrl+settings.padId; |
|||
iFrameLink = iFrameLink + '?showControls=' + settings.showControls; |
|||
iFrameLink = iFrameLink + '&showChat=' + settings.showChat; |
|||
iFrameLink = iFrameLink + '&showLineNumbers=' + settings.showLineNumbers; |
|||
iFrameLink = iFrameLink + '&useMonospaceFont=' + settings.useMonospaceFont; |
|||
iFrameLink = iFrameLink + '&userName=' + settings.userName; |
|||
if (settings.lang) { |
|||
iFrameLink = iFrameLink + '&lang=' + settings.lang; |
|||
} |
|||
iFrameLink = iFrameLink + '&noColors=' + settings.noColors; |
|||
iFrameLink = iFrameLink + '&userColor=' + settings.userColor; |
|||
iFrameLink = iFrameLink + '&hideQRCode=' + settings.hideQRCode; |
|||
iFrameLink = iFrameLink + '&alwaysShowChat=' + settings.alwaysShowChat; |
|||
iFrameLink = iFrameLink + '&rtl=' + settings.rtl; |
|||
iFrameLink = iFrameLink + pluginParams; |
|||
iFrameLink = iFrameLink +'" style="border:' + settings.border; |
|||
iFrameLink = iFrameLink +'; border-style:' + settings.borderStyle; |
|||
iFrameLink = iFrameLink +';" width="' + '100%';//settings.width;
|
|||
iFrameLink = iFrameLink +'" height="' + settings.height; |
|||
iFrameLink = iFrameLink +'"></iframe>'; |
|||
|
|||
|
|||
var $iFrameLink = $(iFrameLink); |
|||
|
|||
if (useValue) { |
|||
var $toggleLink = $('<a href="#'+ selfId +'">'+ settings.toggleTextOn +'</a>').click(function(){ |
|||
var $this = $(this); |
|||
$this.toggleClass('active'); |
|||
if ($this.hasClass('active')) $this.text(settings.toggleTextOff); |
|||
$self.pad({getContents: true}); |
|||
return false; |
|||
}); |
|||
$self |
|||
.hide() |
|||
.after($toggleLink) |
|||
.after($iFrameLink) |
|||
; |
|||
} |
|||
else { |
|||
$self.html(iFrameLink); |
|||
} |
|||
} |
|||
|
|||
// This reads the etherpad contents if required
|
|||
else { |
|||
var frameUrl = $('#'+ epframeId).attr('src').split('?')[0]; |
|||
var contentsUrl = frameUrl + "/export/html"; |
|||
var target = $('#'+ options.getContents); |
|||
|
|||
// perform an ajax call on contentsUrl and write it to the parent
|
|||
$.get(contentsUrl, function(data) { |
|||
|
|||
if (target.is(':input')) { |
|||
target.val(data).show(); |
|||
} |
|||
else { |
|||
target.html(data); |
|||
} |
|||
|
|||
$('#'+ epframeId).remove(); |
|||
}); |
|||
} |
|||
|
|||
|
|||
return $self; |
|||
}; |
|||
})( jQuery ); |
Loading…
Reference in new issue