function BxDolPageBuilder( options ) {
this.options = options;
this.loadAreas();
}
BxDolPageBuilder.prototype.resetPage = function() {
if( !confirm( _t('_adm_pbuilder_Reset_page_warning') ) )
return false;
$.post(
this.options.parser,
{
action: 'resetPage',
Page: this.options.page
},
function() {
location.reload();
}
);
}
BxDolPageBuilder.prototype.loadAreas = function() {
var _builder = this;
this.activeArea = $( '#activeBlocksArea' ).get(0);
this.inactiveArea = $( '#inactiveBlocksArea' ).get(0);
this.samplesArea = $( '#samplesBlocksArea' ).get(0);
this.eAllAreas = $(this.activeArea).add(this.inactiveArea).add(this.samplesArea).parent().parent().get(0);
$.getJSON( this.options.parser, {action:'load', Page: this.options.page}, function( oJSON ){_builder.loadJSON( oJSON )} );
}
BxDolPageBuilder.prototype.loadJSON = function( oJSON ) {
var _builder = this;
if( window.console) console.log( oJSON );
if( !oJSON.active ||!oJSON.widths || !oJSON.inactive || !oJSON.samples || !oJSON.min_widths )
return false;
$(this.activeArea ).html( '' );
$(this.inactiveArea).html( '' );
$(this.samplesArea ).html( '' );
this.minWidths = oJSON.min_widths;
var iColumns = 0;
//active blocks
for( var iColumn in oJSON.widths ) {
var iWidth = oJSON.widths[iColumn];
var aBlocks = oJSON.active[iColumn];
var aBlocksOrder = oJSON.active_order[iColumn];
this.drawColumn( iColumn, iWidth, aBlocks, aBlocksOrder );
iColumns ++;
}
this.checkAddColumn();
//inactive blocks
for( var iBlockID in oJSON.inactive ) {
var sBlockCaption = oJSON.inactive[iBlockID];
this.drawBlock( iBlockID, sBlockCaption, this.inactiveArea );
}
//inactive blocks
for( var iBlockID in oJSON.samples ) {
var sBlockCaption = oJSON.samples[iBlockID];
this.drawBlock( iBlockID, sBlockCaption, this.samplesArea );
}
$(this.inactiveArea ).append( '
' );
$(this.samplesArea ).append( '' );
this.initPageWidthSlider();
this.initOtherPagesWidthSlider();
this.initColsSlider();
this.checkBlocksMaxWidths();
this.activateSortables();
}
BxDolPageBuilder.prototype.initPageWidthSlider = function() {
var _builder = this;
var $slider = $( '#pageWidthSlider' );
if( !$slider.length )
return false;
$slider.slider({
min: this.options.pageWidthMin,
max: this.options.pageWidthMax + 1,
value: this.width2slider( this.options.pageWidth ),
change: function(e,ui) {_builder.onWidthSliderStop(ui.value)},
slide: function(e,ui) {_builder.onWidthSliderMove(ui.value)}
});
$('#pageWidthValue').html(this.options.pageWidth);
}
BxDolPageBuilder.prototype.initOtherPagesWidthSlider = function() {
var _builder = this;
var $slider = $( '#pageWidthSlider1' );
if( !$slider.length )
return false;
$slider.slider({
min: this.options.pageWidthMin,
max: this.options.pageWidthMax + 1,
value: this.width2slider( this.options.otherPagesWidth ),
change: function(e,ui) {_builder.onOtherWidthSliderStop(ui.value)},
slide: function(e,ui) {_builder.onOtherWidthSliderMove(ui.value)}
});
$('#pageWidthValue1').html(this.options.otherPagesWidth);
}
BxDolPageBuilder.prototype.width2slider = function( sCurWidth ) {
if( sCurWidth == '100%' )
return this.options.pageWidthMax + 1;
return parseInt( sCurWidth );
}
BxDolPageBuilder.prototype.slider2width = function( iSliderVal ) {
if(iSliderVal > this.options.pageWidthMax)
return '100%';
return iSliderVal + 'px';
}
BxDolPageBuilder.prototype.onWidthSliderStop = function(value) {
var _builder = this;
//set current page width
this.options.pageWidth = this.slider2width(value);
//submit page width
$.post( this.options.parser, {
action: 'savePageWidth',
Page: this.options.page,
width: this.options.pageWidth
},
function( sResponse ) {
if( sResponse != 'OK' )
alert( sResponse );
} );
//update columns headers
$( '.buildColumn', this.activeArea ).each( function(iInd){
_builder.setColumnHeader( this, (iInd + 1) );
} );
this.checkBlocksMaxWidths();
}
BxDolPageBuilder.prototype.onWidthSliderMove = function(value) {
var sCurPageWidth = this.slider2width(value);
$( '#pageWidthValue' ).html( sCurPageWidth );
}
BxDolPageBuilder.prototype.onOtherWidthSliderStop = function(value) {
var _builder = this;
//set current page width
this.options.otherPagesWidth = this.slider2width( value );
//submit page width
$.post( this.options.parser, {
action: 'saveOtherPagesWidth',
Page: this.options.page,
width: this.options.otherPagesWidth
},
function( sResponse ) {
if( sResponse != 'OK' )
alert( sResponse );
} );
}
BxDolPageBuilder.prototype.onOtherWidthSliderMove = function(value) {
var sCurPageWidth = this.slider2width( value );
$( '#pageWidthValue1' ).html( sCurPageWidth );
}
BxDolPageBuilder.prototype.checkBlocksMaxWidths = function() {
//remove alerts
$( '.blockAlert' ).remove();
if( this.options.pageWidth == '100%' )
return ; //do not check
for( var iBlockID in this.minWidths ) {
var iBlockMinWidth = this.minWidths[iBlockID];
var $block = $( '#buildBlock_' + iBlockID );
var iColumnWidth = Math.round( parseInt( this.options.pageWidth ) * parseInt( $block.parent().parent().css( 'width' ) ) / 100 );
if( iColumnWidth < iBlockMinWidth ) {
$( '
' )
.appendTo( $block )
.hover(
function(){showFloatDesc( _t('_adm_pbuilder_Column_non_enough_width_warn', iBlockMinWidth));},
function(){hideFloatDesc();}
)
.mousemove( function(e){moveFloatDesc( e )} );
}
}
}
BxDolPageBuilder.prototype.checkAddColumn = function() {
var iColumns = $('.buildColumn', this.activeArea).length;
$('#addColumnButton').attr('disabled', iColumns >= this.options.maxCols ? 'disabled' : '');
$('#addFullColumnButton').attr('disabled', iColumns >= this.options.maxCols ? 'disabled' : '');
$('#resetPage').attr('disabled', this.options.page == undefined || this.options.page == '' ? 'disabled' : '');
}
BxDolPageBuilder.prototype.addColumn = function() {
this.drawColumn($('.buildColumn',this.activeArea).length, 0, {}, {});
this.checkAddColumn();
this.refreshSortables();
this.reArrangeColumns();
}
BxDolPageBuilder.prototype.addFullColumn = function() {
this.drawFullColumn($('.buildColumn',this.activeArea).length, 0, {}, {});
this.checkAddColumn();
this.refreshSortables();
}
BxDolPageBuilder.prototype.drawFullColumn = function( iColumnNum, iWidth, aBlocks, aBlocksOrder ) {
$('div.clear_both',this.activeArea).remove();
var $newColumn = $(
''
).prependTo(this.activeArea);
this.setColumnHeader( $newColumn, iColumnNum, true );
var eColumnCont = $( '.buildColumnCont', $newColumn ).get(0);
for( var i in aBlocksOrder ) {
var iBlockID = aBlocksOrder[i];
var sBlockCaption = aBlocks[iBlockID];
this.drawBlock( iBlockID, sBlockCaption, eColumnCont );
}
$(this.activeArea).append( '' );
}
BxDolPageBuilder.prototype.initColsSlider = function() {
var iSliderValue = 0;
var aSliderValues = [];
var _builder = this;
var $Columns = $( '.buildColumn', this.activeArea );
var iColumns = $Columns.length;
if( iColumns < 2 )
return; //dont insert
for( var iSliderNum = 0; iSliderNum < (iColumns - 1); iSliderNum ++ ) {
var iColWidth = parseFloat( $Columns.eq(iSliderNum).css( 'width' ) );
iSliderValue += iColWidth;
aSliderValues[iSliderNum] = iSliderValue*10;
}
//init slider
$( '#columnsSlider' )
.slider('destroy')
.slider( {
change: function(e,ui) {_builder.onColsSliderStop(ui)},
slide: function(e,ui) {_builder.onColsSliderMove(ui)},
max: 1000,
values: aSliderValues
} );
}
BxDolPageBuilder.prototype.onColsSliderStop = function() {
this.checkBlocksMaxWidths();
this.submitWidths();
}
BxDolPageBuilder.prototype.onColsSliderMove = function(slider) {
var _builder = this;
var aValues = new Array();
if( typeof slider.values == 'object' ) {
var iCounter = 0;
for( var iInd in slider.values )
aValues[iCounter++] = slider.values[iInd] / 10;
} else if( typeof slider.values == 'number' ) {
aValues[0] = slider.values / 10;
}
aValues[aValues.length] = 100;
//console.log( aValues );
var iMinusWidth = 0;
$('.buildColumn', this.activeArea).each( function(iInd){
var iNewWidth = aValues[iInd] - iMinusWidth;
$(this).css( 'width', iNewWidth + '%' );
_builder.setColumnHeader( this, (iInd+1) );
iMinusWidth += iNewWidth;
} );
}
BxDolPageBuilder.prototype.submit = function() {
var _builder = this;
var aColumns = new Array();
//get columns
$( '.buildColumn', this.activeArea ).each( function(){
var iColumn = aColumns.length;
aColumns[iColumn] = new Array();
//get blocks
$( '.buildBlock', this ).each( function(){
var iItemID = parseInt( this.id.substr( 'buildBlock_'.length ) );
aColumns[iColumn].push(iItemID);
} );
aColumns[iColumn] = aColumns[iColumn].join(',');
iColumn ++;
} );
$.post(
this.options.parser, {
action: 'saveBlocks',
Page: this.options.page,
'columns[]': aColumns,
_t: new Date()
},
function(sResponse){
if( sResponse != 'OK' )
alert(sResponse);
_builder.submitWidths();
}
);
}
BxDolPageBuilder.prototype.submitWidths = function() {
var aWidths = new Array();
$( '.buildColumn', this.activeArea ).each( function(){
aWidths[aWidths.length] = parseFloat( $(this).css('width') );
} );
$.post(
this.options.parser,
{
action:'saveColsWidths',
Page: this.options.page,
'widths[]': aWidths
},
function(sResponse){
if( sResponse != 'OK' )
alert(sResponse);
}
);
}
BxDolPageBuilder.prototype.setColumnHeader = function( parent, iNum, bIgnoreColsNum ) {
var bIgnoreColsNum = bIgnoreColsNum || false;
var _builder = this;
var iPerWidth = parseFloat( $(parent).css('width') );
var sPixAdd = '';
if( this.options.pageWidth.substr(-2) == 'px' ) {
var iPixWidth = Math.round( ( parseInt( this.options.pageWidth ) * iPerWidth ) / 100 );
sPixAdd = '/' + iPixWidth + 'px';
}
var $header = $('.buildColumnHeader', parent).html(
_t('_adm_btn_Column') + ' ' + iNum +
' (' + iPerWidth + '%' + sPixAdd + ')'
);
if( bIgnoreColsNum || $('.buildColumn', this.activeArea).length > this.options.minCols ) {
$header.append(
'
'
).children('a').click( function(){
if( confirm( _t('_adm_pbuilder_Column_delete_confirmation') ) ) {
_builder.deleteColumn( parent );
}
return false;
});
}
}
BxDolPageBuilder.prototype.deleteColumn = function( column ) {
$('.buildBlock', column).prependTo( this.inactiveArea );
$(column).remove();
this.checkAddColumn();
this.reArrangeColumns();
}
BxDolPageBuilder.prototype.reArrangeColumns = function() {
var _builder = this;
var $columns = $('.buildColumn', this.activeArea);
var iNewWidth = Math.floor( 100 / $columns.length );
$columns.css( 'width', iNewWidth + '%' ).each( function( iInd ) {
_builder.setColumnHeader( this, (iInd+1) );
} );
this.initColsSlider();
this.submit();
}
BxDolPageBuilder.prototype.destroySortables = function() {
if( this.oSIColumns )
this.oSIColumns.destroy();
if( this.oSIBlocks )
this.oSIBlocks.destroy();
}
BxDolPageBuilder.prototype.activateSortables = function() {
var _builder = this;
$(this.activeArea).sortable('destroy').sortable({
items: '.buildColumn',
hoverClass: 'buildHover',
forceHelperSize: true,
//appendTo: 'body',
cancel: '.buildBlock',
placeholder: 'buildColumn ui-sortable-placeholder',
forcePlaceholderSize: true,
stop: function() {_builder.columnsStopSort();}
});
var $bl = $('.buildColumnCont', this.eAllAreas).add(this.inactiveArea).add(this.samplesArea);
$bl.sortable('destroy').sortable({
items: '.buildBlock,.buildBlockFake',
connectWith: $bl,
placeholder: 'buildBlock ui-sortable-placeholder',
forcePlaceholderSize: true,
stop: function(e, ui) {_builder.blocksStopSort(ui.item[0]);}
});
}
BxDolPageBuilder.prototype.refreshSortables = function() {
this.activateSortables();
}
BxDolPageBuilder.prototype.columnsStopSort = function( cycled ) {
var _builder = this;
if( cycled == undefined ) {
setTimeout(function(){_builder.columnsStopSort(true)}, 600);
return ;
}
var iCounter = 0;
var iSliderValue = 0;
$('.buildColumn', this.activeArea).each( function(){
var iWidth = parseFloat( $(this).css('width') );
iSliderValue += iWidth;
//update slider
$('#columnsSlider').slider('values', iCounter, iSliderValue*10);
//update column header
_builder.setColumnHeader( this, (iCounter + 1) );
iCounter ++;
} );
this.submit();
}
BxDolPageBuilder.prototype.blocksStopSort = function(eDragged, cycled) {
var _builder = this;
if( cycled == undefined ) {
setTimeout(function(){_builder.blocksStopSort(eDragged, true)}, 600);
return ;
}
//check if the dragged element is sample
if( $( '#' + eDragged.id, this.activeArea ).length ) { // if it is dragged to the active area
var iBlockID = parseInt( eDragged.id.substr( 'buildBlock_'.length ) );
$.post(
this.options.parser,
{
action: 'checkNewBlock',
Page: this.options.page,
id: iBlockID
},
function( sResponse ) {
if( sResponse == '' ) {
_builder.submit();
} else {
var iNewBlockID = parseInt( sResponse );
if( iNewBlockID )
_builder.addBlock(iNewBlockID,eDragged);
_builder.submit();
}
}
);
} else
this.submit();
}
BxDolPageBuilder.prototype.addBlock = function( iNewID, eBefore ) {
this.drawBlock( iNewID, $(eBefore).text(), this.samplesArea );
$( '#buildBlock_' + iNewID, this.samplesArea ).insertBefore( eBefore );
$( eBefore ).prependTo( this.samplesArea );
this.refreshSortables();
}
BxDolPageBuilder.prototype.drawColumn = function( iColumnNum, iWidth, aBlocks, aBlocksOrder ) {
$('div.clear_both',this.activeArea).remove();
var $newColumn = $(
''
).appendTo(this.activeArea);
this.setColumnHeader( $newColumn, iColumnNum, true );
var eColumnCont = $( '.buildColumnCont', $newColumn ).get(0);
for( var i in aBlocksOrder ) {
var iBlockID = aBlocksOrder[i];
var sBlockCaption = aBlocks[iBlockID];
this.drawBlock( iBlockID, sBlockCaption, eColumnCont );
}
$(this.activeArea).append( '' );
}
BxDolPageBuilder.prototype.drawBlock = function( iBlockID, sBlockCaption, eColumnCont ) {
var _builder = this;
if (sBlockCaption.length == 0)
sBlockCaption = _t('_Empty');
$(
''
)
.appendTo(eColumnCont)
.children('a')
.click( function() {
_builder.openProperties( iBlockID );
return false;
} );
}
BxDolPageBuilder.prototype.openProperties = function( iBlockID ) {
var _builder = this;
if (!$('#editFormCont').length) {
$('').prependTo('body');
}
$('#editFormCont')
.load(
this.options.parser,
{
action:'loadEditForm',
Page: this.options.page,
id: iBlockID
},
function() {
var $form = $('form', this);
$(this).dolPopup({
closeOnOuterClick: false,
fog: {
color: '#fff',
opacity: .7
}
});
$('#form_input_html' + iBlockID, $form).each( function(){
tinyMCE.execCommand('mceAddControl', false, 'form_input_html' + iBlockID);
} );
$('#editFormCont .dbTopMenu .adm-db-close a').click( function(){
$('#form_input_html' + iBlockID, $form).each( function() {
tinyMCE.execCommand('mceRemoveControl', false, 'form_input_html' + iBlockID);
} );
$( '#editFormCont' ).dolPopupHide({});
return false;
} );
$(':reset[name=Cancel]', $form).click( function(){
$('#form_input_html' + iBlockID, $form).each( function() {
tinyMCE.execCommand('mceRemoveControl', false, 'form_input_html' + iBlockID);
} );
$( '#editFormCont' ).dolPopupHide({});
return false;
} );
$(':reset[name=Delete]',$form).click( function(){
if( confirm( _t('_adm_pbuilder_Want_to_delete') ) ) {
_builder.deleteBlock( iBlockID );
$( '#editFormCont' ).dolPopupHide({});
}
});
$form.ajaxForm( {
beforeSubmit: function(){
$('#form_input_html' + iBlockID, $form).each( function() {
tinyMCE.execCommand('mceRemoveControl', false, 'form_input_html' + iBlockID);
});
return true;
},
success: function(sResponse){
_builder.updateBlock( iBlockID, sResponse );
$( '#editFormCont' ).dolPopupHide({});
}
} );
}
);
}
BxDolPageBuilder.prototype.deleteCustomPage = function( sPageName ) {
var _this = this;
if( confirm( _t('_Are you sure?') ) ) {
$.post( this.options.parser,{
action: 'deleteCustomPage',
Page: this.options.page
}, function(sErrorMessage){
if(!sErrorMessage) {
//make redirect to builder home page
window.location = _this.options.parser
}
else {
//generate error message
alert(sErrorMessage);
}
});
}
}
BxDolPageBuilder.prototype.deleteBlock = function( iBlockID ) {
$( '#buildBlock_' + iBlockID ).remove();
$.post( this.options.parser,{
action: 'deleteBlock',
Page: this.options.page,
id: iBlockID
} );
}
BxDolPageBuilder.prototype.updateBlock = function( iBlockID, sCaption ) {
var _builder = this;
$( '#buildBlock_' + iBlockID ).html( '' + sCaption + '' )
.children('a').click( function() {
_builder.openProperties( iBlockID );
return false;
} );
}
BxDolPageBuilder.prototype.getHorizScroll = function() {
if (navigator.appName == "Microsoft Internet Explorer")
return document.documentElement.scrollLeft;
else
return window.pageXOffset;
}
BxDolPageBuilder.prototype.getVertScroll = function()
{
if (navigator.appName == "Microsoft Internet Explorer")
return document.documentElement.scrollTop;
else
return window.pageYOffset;
}
function showNewPageDialog(sParserUrl) {
if (!$('#editFormCont').length) {
$('').prependTo('body');
}
$('#editFormCont')
.load(
sParserUrl,
{
action_sys:'loadNewPageForm'
},
function() {
var $form = $('form', this);
$(this).dolPopup({
fog: {
color: '#fff',
opacity: .7
}
});
$(':reset[name=Cancel]',$form).click( function(){
$( '#editFormCont' ).dolPopupHide({});
return false;
} );
$form.ajaxForm( {
success: function(sResponse){
if (sResponse == 'OK') {
window.location = sParserUrl + '?Page=' + encodeURIComponent($('input[name=uri]', $form).val());
} else {
alert('Cannot create page. ' + sResponse);
}
}
} );
}
);
}