/**
* Control the interactions for making an automated feed wizard.
*
* @author andreask7 <andreasks7@users.noreply.github.com>
* @license Unlicense
* @since 1.6.16-fork
*/
/**
* To be added to jQuery $.fn.get_adv_xpath, makes various unknown things.
*/
function extend_adv_xpath() {
$('#adv')
.prepend(
'<p style="text-align: left;">' +
'<input style="vertical-align: middle; margin: 2px;" class="xpath" ' +
'type="radio" name="xpath" value=\'\'>' +
'custom: ' +
'<input type="text" id="custom_xpath" name="custom_xpath" ' +
'style="width:70%" ' +
'onkeyup="try{val=$(\'#custom_xpath\').val();valid=$(document).xpath(val);}catch(err){val=\'\';valid=0;}if(valid==0){$(this).parent().find(\'.xpath\').val(\'\');if($(this).parent().find(\':radio\').is(\':checked\'))$(\'#adv_get_button\').prop(\'disabled\', true);$(\'#custom_img\').attr(\'src\',\'icn/exclamation-red.png\');}else {$(this).parent().find(\'.xpath\').val(val);if($(this).parent().find(\':radio\').is(\':checked\'))$(\'#adv_get_button\').prop(\'disabled\', false);$(\'#custom_img\').attr(\'src\',\'icn/tick.png\');}return false;" onpaste="setTimeout(function() {try{val=$(\'#custom_xpath\').val();valid=$(document).xpath(val);}catch(err){val=\'\';valid=0;}if(valid==0){$(this).parent().find(\'.xpath\').val(\'\');if($(\'#custom_xpath\').parent().find(\':radio\').is(\':checked\'))$(\'#adv_get_button\').prop(\'disabled\', true);$(\'#custom_img\').attr(\'src\',\'icn/exclamation-red.png\');}else {$(\'#custom_xpath\').parent().find(\'.xpath\').val(val);if($(\'#custom_xpath\').parent().find(\':radio\').is(\':checked\'))$(\'#adv_get_button\').prop(\'disabled\', false);$(\'#custom_img\').attr(\'src\',\'icn/tick.png\');}}, 0);" value=\'\'>' +
'</input>' +
'<img id="custom_img" src="icn/exclamation-red.png" alt="-" />' +
'</input>' +
'</p>'
);
$('#adv').show();
$('*').removeClass("lwt_marked_text");
$('*[class=\'\']').removeAttr( 'class' );
var val1=$($('#mark_action :selected').data()).get( 0 ).tagName.toLowerCase(),
attr='',
node_count=0,
attr_v='',
attr_p='',
val_p='';
for (var i=0, attrs=this[0].attributes, l=attrs.length; i<l; i++){
if(attrs.item(i).nodeName=='id'){
var id_cont=attrs.item(i).nodeValue.split(' ');
for (var z=0; z<id_cont.length; z++){
var val='//*[@id[contains(concat(" ",normalize-space(.)," ")," ' + id_cont[z] + ' ")]]';
$('#adv')
.prepend(
'<p style="text-align: left;">' +
'<input style="vertical-align: middle; margin: 2px;" ' +
'class="xpath" type="radio" name="xpath" value=\''+val+'\'>' +
'contains id: «'+ id_cont[z] +'»' +
'</input>' +
'</p>'
);
}
}
if(attrs.item(i).nodeName=='class'){
var cl_cont=attrs.item(i).nodeValue.split(' ');
for (var z=0; z<cl_cont.length; z++){
val = '//*[@class[contains(concat(" ",normalize-space(.)," ")," ' +
cl_cont[z] + ' ")]]';
$('#adv')
.prepend(
'<p style="text-align: left;">' +
'<input style="vertical-align: middle; margin: 2px;" ' +
'class="xpath" type="radio" name="xpath" value=\''+val+'\'>'+
'contains class: «'+ cl_cont[z] +'»' +
'</input>' +
'</p>'
);
}
}
if(i>0)attr_v += ' and ';
if(i==0)attr_v += '[';
attr_v +='@' + attrs.item(i).nodeName;
attr_v += '="' + attrs.item(i).nodeValue + '"';
if(i==(attrs.length-1))attr_v += ']';
}
this.parents().each(function(){
var pa=$(this).get(0);
for(var i=0, attrs=pa.attributes, l=attrs.length; i<l; i++){
if(node_count==0){
if(attrs.item(i).nodeName=='id'){
id_cont=attrs.item(i).nodeValue.split(' ');
for (var z=0; z<id_cont.length; z++){
val='//*[@id[contains(concat(" ",normalize-space(.)," ")," ' +
id_cont[z] + ' ")]]';
$('#adv')
.prepend(
'<p style="text-align: left;">' +
'<input style="vertical-align: middle; margin: 2px;" ' +
'class="xpath" type="radio" name="xpath" value=\''+val+ '/'+
val1+'\'>' +
'parent contains id: «'+ id_cont[z] +'»' +
'</input>' +
'</p>'
);
}
}
if(attrs.item(i).nodeName=='class'){
cl_cont=attrs.item(i).nodeValue.split(' ');
for (var z=0; z<cl_cont.length; z++){
if(cl_cont[z]!='lwt_filtered_text'){
val='//*[@class[contains(concat(" ",normalize-space(.)," ")," ' + cl_cont[z] + ' ")]]';
$('#adv').prepend('<p style="text-align: left;"><input style="vertical-align: middle; margin: 2px;" class="xpath" type="radio" name="xpath" value=\''+val+ '/'+ val1+'\'>parent contains class: «'+ cl_cont[z] +'»</input></p>');
}
}
}
}
if(attrs.length > 1 || attrs.item(i).nodeValue!='lwt_filtered_text'){
if(i>0 && attrs.item(i).nodeValue!='lwt_filtered_text')attr_p += ' and ';
if(i==0)attr_p += '[';
if(attrs.item(i).nodeValue!='lwt_filtered_text')attr_p +='@' + attrs.item(i).nodeName;
if(attrs.item(i).nodeValue!='lwt_filtered_text')attr_p += '="' + attrs.item(i).nodeValue.replace('lwt_filtered_text','').trim() + '"';
if(i==(attrs.length-1))attr_p += ']';
}
}
val_p= pa.tagName.toLowerCase() + attr_p+ '/'+val_p ;attr_p='';
pa='';
node_count++;
});
$('#adv').prepend('<p style="text-align: left;"><input style="vertical-align: middle; margin: 2px;" class="xpath" type="radio" name="xpath" value=\'/'+val_p+val1 + attr_v+'\'>all: « /'+ val_p.replace('=""','') +val1 + attr_v.replace('=""','') +' »</input></p>');
$( '#adv input[type="radio"]' ).each(function(z){
if(typeof z == 'undefined')z=1;
if(typeof $(this).attr('id') == 'undefined'){
$(this).attr('id','rb_'+z++);
}
$(this).after('<label class="wrap_radio" for="'+$(this).attr('id')+'"><span></span></label>');
});
}
const lwt_feed_wiz_opt_inter = {
clickHeader: function (event) {
if(!($(event.target).hasClass( "lwt_selected_text" ))){
if(!($(event.target).hasClass( "lwt_filtered_text" ))){
if($(event.target).hasClass( "lwt_marked_text" )){
$("#mark_action").empty();
$('*').removeClass("lwt_marked_text");
$('*[class=\'\']').removeAttr( 'class' );
$('button[name="button"]').prop('disabled', true);
$('<option/>').val('').text('[Click On Text]')
.appendTo('#mark_action');
return false;
}
else{
$('*').removeClass("lwt_marked_text");
$("#mark_action").empty();
var filter_array = [];
$(event.target).parents(':not(html,body)').addBack()
.each(function() {
if(!($(this).hasClass( "lwt_filtered_text" ))){
filter_array = [];
$(this).parents('.lwt_filtered_text').each(function(){
$(this).removeClass('lwt_filtered_text');
filter_array.push(this);
});
$('*[class=\'\']').removeAttr( 'class' );
var el=this;
if($(this).attr('style')==='')$(this).removeAttr( "style" );
val1=$(this).get( 0 ).tagName.toLowerCase();
var attr='',
attr_v='',
attr_p='',
attr_mode='',
val_p='';
if($('select[name="select_mode"]').val()!='0'){
attr_mode=5;
}
else if($(this).attr('id'))attr_mode=1;
else if($(this).parent().attr('id'))attr_mode=2;
else if($(this).attr('class'))attr_mode=3;
else if($(this).parent().attr('class'))attr_mode=4;
else attr_mode=5;
for (var i=0, attrs=el.attributes, l=attrs.length; i<l; i++){
if(attr_mode==5 || (attrs.item(i).nodeName=='class' && attr_mode!=1) || (attrs.item(i).nodeName=='id')){
attr += attrs.item(i).nodeName;
attr += '="' + attrs.item(i).nodeValue + '" ';
if(i>0)attr_v += ' and ';
attr_v +='@' + attrs.item(i).nodeName;
attr_v += '="' + attrs.item(i).nodeValue + '"';
}
}
attr=attr.replace('=""','').trim();
if(attr_v)attr_v='['+attr_v+']';
if(attr_mode!=1 && attr_mode!=3){
for(var i=0, attrs=$(this).parent().get(0).attributes, l=attrs.length; i<l; i++){
if(attr_mode==5 || (attrs.item(i).nodeName=='class' && attr_mode!=2) || (attrs.item(i).nodeName=='id')){
if(i>0)attr_p += ' and ';
attr_p +='@' + attrs.item(i).nodeName;
attr_p += '="' + attrs.item(i).nodeValue + '"';
}
}
if(attr_p)attr_p='['+attr_p+']';
val_p=$(this).parent().get( 0 ).tagName.toLowerCase()+attr_p + '§';
}val_p=val_p.replace('body§', '');
var attrsplit=attr.substr(0,20);
if(!(attrsplit==attr))attrsplit = attrsplit + '... ';
if(!(attrsplit==''))attrsplit = " " + attrsplit;
if(event.target==this)
$("<option/>").val(
'//'+ val_p.replace('=""','')
.replace('[ and @','[@') +val1 + attr_v.replace('=""','')
.replace('[ and @','[@')
).text(
"<" + val1.replace('[ and @','[@') +
attrsplit.replace('[ and @','[@') + ">"
).data(el)
.attr("selected", true).prependTo("#mark_action");
else
$("<option/>").val(
'//'+ val_p.replace('=""','')
.replace('[ and @','[@') +val1 +
attr_v.replace('=""','').replace('[ and @','[@')
).text(
"<" + val1.replace('[ and @','[@') +
attrsplit.replace('[ and @','[@') + ">"
).data(el).prependTo("#mark_action");
for (var i in filter_array) {
$(filter_array[i]).addClass('lwt_filtered_text');
}
}
});
$('button[name="button"]').prop('disabled', false);
var attr=$('#mark_action').val();
attr=attr.replace(/@/g, '').replace('//', '').replace(/ and /g, '][').replace('§', '>');
filter_array = [];
$(this).parents('.lwt_filtered_text').each(function(){
$(this).removeClass('lwt_filtered_text');
filter_array.push(this);
});
$(attr+':not(.lwt_selected_text)').find('*:not(.lwt_selected_text)')
.addBack().addClass("lwt_marked_text");
for (var i in filter_array) {
$(filter_array[i]).addClass('lwt_filtered_text');
}
return false;
}
} else{
event.preventDefault();
}
} else{
var selected_Array = [];
var filter_array = [];
$('.lwt_selected_text').each(function(){
selected_Array.push(this);
});
$(event.target).parents('*').addBack().each(function() {
if(!($(this).parent().hasClass( "lwt_selected_text" )) && $(this).hasClass( "lwt_selected_text" )){
if($(this).hasClass('lwt_highlighted_text')){
$('*').removeClass('lwt_highlighted_text');
}
else{
el=this;
$('*').removeClass('lwt_selected_text');
filter_array = [];
$(this).parents('.lwt_filtered_text').each(function(){
$(this).removeClass('lwt_filtered_text');
filter_array.push(this);
});
$('*[class=\'\']').removeAttr( 'class' );
$('#lwt_sel li').each(function(){
$('*').removeClass('lwt_highlighted_text');
$(this).addClass('lwt_highlighted_text');
$(document).xpath($(this).text()).addClass('lwt_highlighted_text');
if($(el).hasClass('lwt_highlighted_text')){
return false;
}
});
for (var i in selected_Array) {
$(selected_Array[i]).addClass('lwt_selected_text');
}
}
}
});
for (var i in filter_array) {
$(filter_array[i]).addClass('lwt_filtered_text');
}
$('button[name="button"]').prop('disabled', true);
$("#mark_action").empty();
$('<option/>').val('').text('[Click On Text]').appendTo('#mark_action');
return false;
}
},
highlightSelection: function() {
let sel_array="";
$('#lwt_sel li').each(function(){
if($(this).hasClass('lwt_highlighted_text')){
$(document).xpath($(this).text())
.not($('#lwt_header').find('*').addBack())
.addClass('lwt_highlighted_text').find('*').addBack()
.addClass('lwt_selected_text');
}
else
sel_array+=$(this).text() + " | ";
});
if(sel_array!="")
$(document).xpath(sel_array.replace(/ \| $/, '')).find('*')
.addBack().not($('#lwt_header').find('*').addBack())
.addClass('lwt_selected_text');
return sel_array;
}
};
const lwt_feed_wizard = {
prepareInteractions: function () {
if (
$('#lwt_sel').html()=='' &&
parseInt($('input[name=\'step\']').val(), 10) == 2
)
$('#next').prop('disabled', true);
else
$('#next').prop('disabled', false);
$('#lwt_last').css('margin-top',$('#lwt_header').height());
$('#lwt_header').nextAll().on('click', lwt_feed_wiz_opt_inter.clickHeader);
$('*').removeClass('lwt_filtered_text');
$('*[class=\'\']').removeAttr( 'class' );
lwt_feed_wiz_opt_inter.highlightSelection();
for (var i in filter_Array) {
$(filter_Array[i]).addClass('lwt_filtered_text');
}
$('*[style=\'\']').removeAttr( 'style' );
$( "#lwt_header select" ).wrap( "<label class='wrap_select'></label>" );
$(document).mouseup(function(){
$([
"select:not(:active)", "button", "input[type=button]",
".wrap_radio span", ".wrap_checkbox span"
].join()).trigger('blur');
});
},
deleteSelection: function () {
$('*').removeClass('lwt_selected_text').removeClass('lwt_marked_text');
$('*').removeClass('lwt_filtered_text');
$('#lwt_header').nextAll().find('*').addBack().removeClass('lwt_highlighted_text');
$(this).parent().remove();
var sel_array="";
$('#lwt_sel li').each(function(){
if($(this).hasClass('lwt_highlighted_text')){
$(document).xpath($(this).text()).not($('#lwt_header').find('*')
.addBack()).addClass('lwt_highlighted_text').find('*').addBack()
.addClass('lwt_selected_text');
}
else sel_array+=$(this).text() + " | ";
});
if(sel_array!="")
$(document).xpath(sel_array.replace(/ \| $/, '')).find('*')
.addBack().not($('#lwt_header').find('*').addBack())
.addClass('lwt_selected_text');
for (var i in filter_Array) {
$(filter_Array[i]).addClass('lwt_filtered_text');
}
$('*[class=\'\']').removeAttr( 'class' );
$('*[style=\'\']').removeAttr( 'style' );
$('#lwt_last').css('margin-top',$('#lwt_header').height());
if (
$('#lwt_sel').html()=='' &&
parseInt($('input[name=\'step\']').val(), 10)==2
)
$('#next').prop('disabled', true);
return false;
},
changeXPath: function() {
$('#adv_get_button').prop('disabled', false);
$(this).parent().find('img').each(function(){
if($(this).attr('src')=='icn/exclamation-red.png')
$('#adv_get_button').prop('disabled', true);
});
return false;
},
clickAdvGetButton: function(){
$('*').removeClass('lwt_filtered_text');
$('*[class=\'\']').removeAttr( 'class' );
if(typeof $('#adv :radio:checked').val()!='undefined'){
$( '#lwt_sel' ).append(
'<li style=\'text-align: left\'>' +
'<img class=\'delete_selection\' src=\'icn/cross.png\' ' +
'title=\'Delete Selection\' alt=\'\' /> '+
$('#adv :radio:checked').val() +
'</li>'
);
$(document).xpath($('#adv :radio:checked').val()).find('*')
.addBack().not($('#lwt_header').find('*').addBack())
.addClass('lwt_selected_text');
$('#next').prop('disabled', false);
}
$('#adv').hide();
$('#lwt_last').css('margin-top',$('#lwt_header').height());
for (var i in filter_Array) {
$(filter_Array[i]).addClass('lwt_filtered_text');
}
return false;
},
clickSelectLi: function(){
if($(this).hasClass('lwt_highlighted_text')){
$('*').removeClass('lwt_highlighted_text');
}
else{
var selected_Array = [];
$('.lwt_selected_text').each(function(){
$(this).removeClass('lwt_selected_text');
selected_Array.push(this);
});
$('*').removeClass('lwt_filtered_text');
$('*').removeClass('lwt_highlighted_text');
$('*[class=\'\']').removeAttr( 'class' );
$(this).addClass('lwt_highlighted_text');
$(document).xpath($(this).text()).not($('#lwt_header').find('*').addBack())
.addClass('lwt_highlighted_text').find('*').addBack()
.addClass('lwt_selected_text');
for (var i in filter_Array) {
$(filter_Array[i]).addClass('lwt_filtered_text');
}
for (var i in selected_Array) {
$(selected_Array[i]).addClass('lwt_selected_text');
}
}
return false;
},
changeMarkAction: function(){
$('*').removeClass('lwt_marked_text');
$('*[class=\'\']').removeAttr( 'class' );
attr=$('#mark_action').val();
attr=attr.replace(/@/g, '').replace('//', '').replace(/ and /g, '][')
.replace('§', '>');
$('*').removeClass('lwt_filtered_text');
$(attr).find('*:not(.lwt_selected_text)').addBack().addClass('lwt_marked_text');
for (var i in filter_Array) {
$(filter_Array[i]).addClass('lwt_filtered_text');
}
return false;
},
clickGetOrFilter: function(){
$('*').removeClass('lwt_marked_text');
if($('select[name=\'select_mode\']').val()=='adv'){
$('#adv p').remove();
$('*[style=\'\']').removeAttr( 'style' );
$('#adv_get_button').prop('disabled', true);
$($('#mark_action :selected').data()).get_adv_xpath();
}
else{
$('#next').prop('disabled', false);
attr=$('#mark_action').val();
attr=attr.replace(/@/g, '').replace('//', '').replace(/ and /g, '][')
.replace('§', '>');
var filter_Array = [];
$('.lwt_filtered_text').each(function(){
$(this).removeClass('lwt_filtered_text');
filter_Array.push(this);
});
$('*').removeClass('lwt_filtered_text');
$(attr).find('*').addBack().addClass('lwt_selected_text');
for (var i in filter_Array) {
$(filter_Array[i]).addClass('lwt_filtered_text');
}
$('#lwt_sel').append(
'<li style=\'text-align: left\'>' +
'<img class=\'delete_selection\' src=\'icn/cross.png\' ' +
'title=\'Delete Selection\' alt=\''+
$('#mark_action').val()+'\' /> '+
$('#mark_action').val().replace('§', '/') +
'</li>'
);
}
$(this).prop('disabled', true);
$('#mark_action').empty();
$('<option/>').val('').text('[Click On Text]').appendTo('#mark_action');
$('#lwt_last').css('margin-top',$('#lwt_header').height());
return false;
},
clickNextButton: function() {
$('#article_tags,#filter_tags').val($('#lwt_sel').html())
.prop('disabled', false);
const html = $('#lwt_sel li').map(function(){
return $(this).text();
}).get().join(' | ');
$('input[name=\'html\']').val(html);
let val = parseInt($('input[name=\'step\']').val(), 10);
if (val == 2){
$('input[name=\'html\']').attr('name','article_selector')
$('select[name=\'NfArticleSection\'] option').each(function(){
art_sec=$('#lwt_sel li').map(function(){
return $(this).text();
}).get().join(' | ');
$(this).val(art_sec);
});
}
$('input[name=\'step\']').val(++val);
document.lwt_form1.submit();
return false;
},
changeHostStatus: function(){
let host_status = $(this).val();
let current_host = $('input[name=\'host_name\']').val();
$('select[name=\'selected_feed\'] option').each(function(){
let opt_str=$(this).text();
let host_name=opt_str.replace(/[▸\-][0-9\s]*[★☆\-][\s]*host:/, '');
if(host_name.trim()==current_host.trim()){
$(this).text(
opt_str.replace(
/([▸\-][0-9\s]*?)\s[★☆\-]\s(.*)/,
'$1 '+host_status.trim()+' $2'
)
)
}
});
return false;
}
}
/**
* A mess of different things for preparing interactions with feed wizard.
*
* @deprecated Since 2.9.1, use lwt_feed_wizard.prepareInteractions
*/
function feedwizard_prepare_interaction() {
return lwt_feed_wizard.prepareInteractions();
}
$(document).on('click','.delete_selection', lwt_feed_wizard.deleteSelection);
$(document).on('change','.xpath', lwt_feed_wizard.changeXPath);
$(document).on('click','#adv_get_button', lwt_feed_wizard.clickAdvGetButton);
$(document).on('click','#lwt_sel li', lwt_feed_wizard.clickSelectLi);
$(document).on('change','#mark_action', lwt_feed_wizard.changeMarkAction);
$(document).on('click','#get_button,#filter_button', lwt_feed_wizard.clickGetOrFilter);
$(document).on('click','#next', lwt_feed_wizard.clickNextButton);
$(document).on('change','#host_status', lwt_feed_wizard.changeHostStatus);