/*
* HTML Parser By John Resig (ejohn.org)
* Original code by Erik Arvidsson, Mozilla Public License
* http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
* @license GPL 3 or later (http://www.gnu.org/licenses/gpl.html)
*/
var HTMLParser;
var HTMLParserInstalled=true;
var HTMLParser_Elements = new Array();
(function(){
// Regular Expressions for parsing tags and attributes
var startTag = /^<(\w+)((?:\s+[\w-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/,
endTag = /^<\/(\w+)[^>]*>/,
attr = /([\w-]+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;
// Empty Elements - HTML 4.01
var empty = makeMap("br,col,hr,img");
// HTMLParser_Elements['empty'] = empty;
// Block Elements - HTML 4.01
var block = makeMap("blockquote,center,del,div,dl,dt,hr,iframe,ins,li,ol,p,pre,table,tbody,td,tfoot,th,thead,tr,ul");
// HTMLParser_Elements['block'] = block;
// Inline Elements - HTML 4.01
var inline = makeMap("a,abbr,acronym,b,big,br,cite,code,del,em,font,h1,h2,h3,h4,h5,h6,i,img,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var");
// Elements that you can, intentionally, leave open
// (and which close themselves)
var closeSelf = makeMap("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr");
// Attributes that have their values filled in disabled="disabled"
var fillAttrs = makeMap("checked,disabled,ismap,noresize,nowrap,readonly,selected");
// Special Elements (can contain anything)
var special = makeMap("script,style");
//define ('BROKEN_IMAGE', DOKU_URL . 'lib/plugins/ckgedit/fckeditor/userfiles/blink.jpg?nolink&33x34');
var broken_image ='http://' + location.host + DOKU_BASE + '/lib/plugins/ckgedit/fckeditor/userfiles/blink.jpg?nolink&33x34';
HTMLParser = this.HTMLParser = function( html, handler ) {
var index, chars, match, stack = [], last = html;
html = html.replace(/(
)*\s*~~START_HTML_BLOCK~~\s*(<\/p>)*([\s\S]+)~~CLOSE_HTML_BLOCK~~\s*(<\/p>)*/gm, function(match,p,p1,text,p2) {
text = text.replace(/<\/?div.*?>/gm,"");
text = text.replace(//gm,"");
text = text.replace(/<\/code>/gm,"");
text = text.replace(/fckgL\d+\s*\<\/sup\>)\<\/a\>/gm, function(match,sup,a) {
return( '' +sup);
}
);
/* remove html5 attributes */
var pos = html.indexOf('data-');
if(pos != -1) {
html = html.replace(/(<\w+)([^>]+)>/gm,function(match,tag,atts){
atts = atts.replace(/data-[\w\-]+\s*=\s*(\"|\')\w+(\"|\')/,"");
//alert(atts);
return tag + atts+ '>';
});
}
stack.last = function(){
return this[ this.length - 1 ];
};
while ( html ) {
chars = true;
// Make sure we're not in a script or style element
if ( !stack.last() || !special[ stack.last() ] ) {
// Comment
if ( html.indexOf("");
if ( index >= 0 ) {
if ( handler.comment )
handler.comment( html.substring( 4, index ) );
html = html.substring( index + 3 );
chars = false;
}
// end tag
} else if ( html.indexOf("") == 0 ) {
match = html.match( endTag );
if ( match ) {
html = html.substring( match[0].length );
match[0].replace( endTag, parseEndTag );
chars = false;
}
// start tag
} else if ( html.indexOf("<") == 0 ) {
match = html.match( startTag );
if ( match ) {
html = html.substring( match[0].length );
match[0].replace( startTag, parseStartTag );
chars = false;
}
}
if ( chars ) {
index = html.indexOf("<");
var text = index < 0 ? html : html.substring( 0, index );
html = index < 0 ? "" : html.substring( index );
if ( handler.chars )
handler.chars( text );
}
} else {
html = html.replace(new RegExp("(.*)<\/" + stack.last() + "[^>]*>"), function(all, text){
text = text.replace(//g, "$1")
.replace(//g, "$1");
if ( handler.chars )
handler.chars( text );
return "";
});
parseEndTag( "", stack.last() );
}
if ( html == last )
throw "Parse Error: " + html;
last = html;
}
// Clean up any remaining tags
parseEndTag();
function parseStartTag( tag, tagName, rest, unary ) {
if ( block[ tagName ] ) {
while ( stack.last() && inline[ stack.last() ] ) {
parseEndTag( "", stack.last() );
}
}
if ( closeSelf[ tagName ] && stack.last() == tagName ) {
parseEndTag( "", tagName );
}
unary = empty[ tagName ] || !!unary;
if ( !unary )
stack.push( tagName );
if ( handler.start ) {
var attrs = [];
rest.replace(attr, function(match, name) {
var value = arguments[2] ? arguments[2] :
arguments[3] ? arguments[3] :
arguments[4] ? arguments[4] :
fillAttrs[name] ? name : "";
attrs.push({
name: name,
value: value,
escaped: value.replace(/(^|[^\\])"/g, '$1\\\"') //"
});
});
if ( handler.start )
handler.start( tagName, attrs, unary );
}
}
function parseEndTag( tag, tagName ) {
// If no tag name is provided, clean shop
if ( !tagName )
var pos = 0;
// Find the closest opened tag of the same type
else
for ( var pos = stack.length - 1; pos >= 0; pos-- )
if ( stack[ pos ] == tagName )
break;
if ( pos >= 0 ) {
// Close all the open elements, up the stack
for ( var i = stack.length - 1; i >= pos; i-- )
if ( handler.end )
handler.end( stack[ i ] );
// Remove the open elements from the stack
stack.length = pos;
}
}
};
function makeMap(str){
var obj = {}, items = str.split(",");
for ( var i = 0; i < items.length; i++ )
obj[ items[i] ] = true;
return obj;
}
})();
function HTMLParser_test_result(results) {
var test_str = "";
for ( i=0; i < results.length; i++) {
var character = results.charAt(i);
if(results.charCodeAt(i) == 10)
character ='\\n';
if(results.charCodeAt(i) == 32)
character ='SP';
var entry = character + ' ';
test_str += entry;
if(results.charCodeAt(i) == 10) {
test_str += "\n";
}
}
if(!confirm(test_str)) return false;
return true;
}
function hide_backup_msg() {
document.getElementById("backup_msg").style.display="none";
return false;
}
function show_backup_msg(msg) {
document.getElementById("backup_msg").style.display="block";
document.getElementById("backup_msg_area").innerHTML = "Backed up to: " + msg;
return false;
}
// legacy functions
function remove_draft(){
}
function dwedit_draft_delete() {
}
// legacy functions end
function setEdHeight(h) {
h = parseInt(h);
document.cookie = 'ckgEdht=' + h +';expires=0;path=' +JSINFO['doku_base'] + ';SameSite=Lax;';
}
/* enable disable image paste */
function ckgd_setImgPaste(which) {
var state = JSINFO['ckgEdPaste'] ? JSINFO['ckgEdPaste'] : "";
if(state == 'on') {
which = 'off'
}
else which = 'on';
JSINFO['ckgEdPaste'] = which;
document.cookie = 'ckgEdPaste=' + which +';expires="Thu, 18 Dec 2575 12:00:00 UTC";path=' +JSINFO['doku_base'];
alert(LANG.plugins.ckgedit.ckg_paste_restart + ' ' + LANG.plugins.ckgedit[which]);
}
function ckg_RawImgMsg() {
return LANG.plugins.ckgedit.broken_image_1 + "\n" + LANG.plugins.ckgedit.broken_image_2 ;
}
function GetE(e) {
return document.getElementById(e);
}
var dokuBase = location.host + DOKU_BASE;
if(window.getSelection != undefined) {
var doku_ckg_getSelection = window.getSelection;
window.getSelection = function(ta) {
if(!ta) ta = GetE("wiki__text");
return doku_ckg_getSelection(ta);
};
}
function ckgedit_seteditor_priority(m,client,dw_val_obj) {
var which = {'Y': 'Dokuwiki', 'N': 'CKEditor'};
if (typeof m === "undefined") { // Safari
if(dw_val_obj[0].checked) {
m= dw_val_obj[0].value;
}
else if(dw_val_obj[1].checked) {
m = dw_val_obj[1].value;
}
}
var params = "dw_val=" + m; params += '&call=cked_selector'; params += "&dwp_client=" + client;
jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', params,
function (data) {
if(data == 'done') {
if(!m)
alert(LANG.plugins.ckgedit.dwp_not_sel);
else
alert(LANG.plugins.ckgedit.dwp_updated + which[m]);
}
else {
alert(LANG.plugins.ckgedit.dwp_save_err + data);
}
},
'html'
);
}
/* gets both size and filetime: "size||filetime" */
function ckged_get_unlink_size(id) {
var params = 'call=cked_deletedsize'; params += "&cked_delid=" + id;
jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', params,
function (data) {
if(data) {
JSINFO['ckg_del_sz'] = data;
//console.log(data);
}
else {
// alert(LANG.plugins.ckgedit.dwp_save_err + data);
}
},
'html'
);
}
function ckged_setmedia(id,del, refresh_cb) {
var params = 'call=cked_upload'; params += "&ckedupl_id=" + id;
if(del) params += "&ckedupl_del=D&delsize="+JSINFO['ckg_del_sz'];
jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', params,
function (data) {
if(data) {
if(refresh_cb) {
refresh_cb.postMessage(JSINFO['doku_url'], JSINFO['doku_url']);
}
// console.log(data);
}
else {
// alert(LANG.plugins.ckgedit.dwp_save_err + data);
}
},
'html'
);
}
jQuery(function() {
if(JSINFO['hide_captcha_error'] =='hide') {
jQuery("div.error").hide();
}
});
jQuery(function() {
jQuery( "#editor_height" ).keydown(function(event) {
if ( event.which == 13 ) {
event.preventDefault();
}
});
$dokuWiki = jQuery('.dokuwiki');
jQuery('.editbutton_table button').click(function() {
var f = this.form;
jQuery('').attr('type','hidden').attr('name','mode').attr('value','dwiki').appendTo(jQuery(f));
jQuery('').attr('type','hidden').attr('name','fck_preview_mode').attr('value','nil').appendTo(jQuery(f));
});
if(typeof(JSINFO['dbl_click_auth'] !== 'undefined') && JSINFO['dbl_click_auth'] == "") return;
if(!JSINFO['ckg_dbl_click']) return;
/**
* If one or more edit section buttons exist?
* This makes sure this feature is enabled only on the edit page and for users with page edit rights.
*/
if (jQuery('.editbutton_section', $dokuWiki).length > 0) {
// register double click event for all headings and section divs
jQuery('[class^="sectionedit"], div[class^="level"]', $dokuWiki).dblclick(function(){
// find the closest edit button form to the element double clicked (downwards) and submit the form
var f = jQuery(this).nextAll('.editbutton_section:eq(0)').children('form:eq(0)');
//alert(jQuery(f).hasClass('button'));
jQuery('').attr('type','hidden').attr('name','mode').attr('value','dwiki').appendTo(jQuery(f));
jQuery('').attr('type','hidden').attr('name','fck_preview_mode').attr('value','nil').appendTo(jQuery(f));
f.submit();
})
}
if(JSINFO['ckg_template'].match(/bootstrap/) && jQuery('div.editButtons').length>0) {
// var n=jQuery('div.editButtons input').length;
jQuery( "div.editButtons input").each(function( index ) {
if(jQuery(this).hasClass('btn-success')) {
jQuery(this).removeClass('btn-success')
}
if(jQuery(this).hasClass('btn-danger')) {
jQuery(this).removeClass('btn-danger');
}
});
}
});
function ckg_edit_mediaman_insert(edid, id, opts, dw_align) {
var link, width, s, align;
//parse option string
var options = opts.substring(1).split('&');
//get width and link options
link = 'detail';
for (var i in options) {
var opt = options[i];
if (typeof opt !== 'string') {
continue;
}
if (opt.match(/^\d+$/)) {
width = opt;
} else if (opt.match(/^\w+$/)) {
link = opt;
}
}
//get alignment option
switch (dw_align) {
case '2':
align = 'medialeft';
break;
case '3':
align = 'mediacenter';
break;
case '4':
align = 'mediaright';
break;
default:
align = '';
break;
}
var funcNum = CKEDITOR.instances.wiki__text._.filebrowserFn;
var fileUrl = DOKU_BASE + 'lib/exe/fetch.php?media=' + id;
CKEDITOR.tools.callFunction(funcNum, fileUrl, function() {
var dialog = this.getDialog();
if ( dialog.getName() == "image" ) {
if (align != null) {
dialog.getContentElement("info", "cmbAlign").setValue(align);
}
if (link != null) {
dialog.getContentElement("info", "cmbLinkType").setValue(link);
}
if (width != null) {
dialog.getContentElement("info", "txtWidth").setValue(width);
dialog.dontResetSize = true;
}
}
});
}
function ckg_edit_mediaman_insertlink(edid, id, opts, dw_align) {
var funcNum = CKEDITOR.instances.wiki__text._.filebrowserFn;
CKEDITOR.tools.callFunction(funcNum, id, function() {
var dialog = this.getDialog();
if (dialog.getName() == "link") {
dialog.getContentElement('info', 'media').setValue(id);
}
});
}
function getCookie(name) {
var re = new RegExp(name + "=([^;]+)");
var value = re.exec(document.cookie);
return (value != null) ? decodeURIComponent(value[1]) : null;
}
function ckg_admininfo(t){
if(t.innerHTML == LANG.plugins.ckgedit.stylesheet_cinfo)
t.innerHTML = LANG.plugins.ckgedit.stylesheet_oinfo;
else t.innerHTML = LANG.plugins.ckgedit.stylesheet_cinfo;
}
/* DOKUWIKI:include_once locktimer.js */