v/pol
1
0
mirror of https://github.com/taroved/pol synced 2025-05-29 12:30:09 -07:00

posts html preview

This commit is contained in:
Alexandr Nesterenko 2017-08-22 20:22:52 +00:00
parent 69c4732455
commit 136b892181
4 changed files with 60 additions and 18 deletions

View File

@ -19,6 +19,8 @@ def build_xpath_results(selectors, file_name):
feed_result = None feed_result = None
field_results = {} field_results = {}
extracted_posts = []
success = True success = True
post_elems = None post_elems = None
try: try:
@ -30,6 +32,7 @@ def build_xpath_results(selectors, file_name):
for elem in post_elems: for elem in post_elems:
selected_required = True selected_required = True
selected_link = True selected_link = True
extracted_post = {}
for name, xpath in field_xpathes.iteritems(): for name, xpath in field_xpathes.iteritems():
if not (name in field_results): if not (name in field_results):
field_results[name] = {} field_results[name] = {}
@ -39,15 +42,19 @@ def build_xpath_results(selectors, file_name):
if name == 'link': if name == 'link':
if not extracts: if not extracts:
selected_link = False selected_link = False
else:
extracted_post[name] = u''.join(extracts)
else: else:
if not extracts: if not extracts:
selected_required = False selected_required = False
else:
extracted_post[name] = u''.join(extracts)
except ValueError as ex: except ValueError as ex:
success = False success = False
field_results[name]['error'] = ex.message field_results[name]['error'] = ex.message
for name, xpath in field_xpathes.iteritems(): if selected_required:
if selected_required: for name, xpath in field_xpathes.iteritems():
if name == 'link': if name == 'link':
if selected_link: if selected_link:
if 'count' in field_results[name]: if 'count' in field_results[name]:
@ -59,6 +66,8 @@ def build_xpath_results(selectors, file_name):
field_results[name]['count'] += 1 field_results[name]['count'] += 1
else: else:
field_results[name]['count'] = 1 field_results[name]['count'] = 1
extracted_posts.append(extracted_post)
else: else:
for name, xpath in field_xpathes.iteritems(): for name, xpath in field_xpathes.iteritems():
xpath = xpath.strip() xpath = xpath.strip()
@ -75,4 +84,4 @@ def build_xpath_results(selectors, file_name):
feed_result = {'error': ex.message} feed_result = {'error': ex.message}
success = False success = False
return [[feed_result, field_results], success] return [[feed_result, field_results], extracted_posts, success]

View File

@ -116,6 +116,34 @@ function changed() {
return ch; return ch;
} }
function showPosts(posts) {
$('.ext-result:not(:first)').remove(); // clear results
$post_tpl = $('.ext-result:first');
posts.forEach(function(post){
var i = 0;
var $post = $post_tpl.clone();
var $post_fields = $post.find('dl > dd > pre');
var $post_dts = $post.find('dl > dt');
var $post_dds = $post.find('dl > dd');
['title', 'link', 'description'].forEach(function(name){
if (name in post) {
$($post_fields[i]).text(post[name].trim());
$($post_fields[i]).addClass('prettyprint');
}
else {
$($post_dts[i]).remove();
$($post_dds[i]).remove();
}
i++;
});
$post.appendTo($post_tpl.parent());
$post[0].style.display = null; // show
});
$('#ext-results')[0].style.display = posts.length > 0 ? 'block' : 'none';
PR.prettyPrint();
}
function active() { function active() {
return _active; return _active;
} }
@ -139,6 +167,9 @@ function show_ext(show) {
$("#st-clicker-trigger")[0].style.display = show ? "inline-block" : "none"; $("#st-clicker-trigger")[0].style.display = show ? "inline-block" : "none";
$("#st-extended")[0].style.display = show ? "block" : "none"; $("#st-extended")[0].style.display = show ? "block" : "none";
$("#st-clicker")[0].style.display = !show ? "block" : "none"; $("#st-clicker")[0].style.display = !show ? "block" : "none";
if (!show)
$('#ext-results')[0].style.display = 'none';
_active = show; _active = show;
} }
@ -196,6 +227,7 @@ $(document).ready(function(){
loader(true); loader(true);
validateSelectors().then(function(res){ validateSelectors().then(function(res){
ET.updateUIMessages(res.messages); ET.updateUIMessages(res.messages);
showPosts(res.posts);
hide_check_show_create(res.success); hide_check_show_create(res.success);
//unfreez UI //unfreez UI
loader(false); loader(false);
@ -218,7 +250,6 @@ $(document).ready(function(){
return true; return true;
});*/ });*/
PR.prettyPrint()
}); });

View File

@ -123,7 +123,7 @@
</div> </div>
<style> <style>
.ext-results { #ext-results {
position: relative; position: relative;
margin: 15px 0; margin: 15px 0;
padding: 19px 9px 4px; padding: 19px 9px 4px;
@ -133,8 +133,8 @@
-moz-border-radius: 4px; -moz-border-radius: 4px;
border-radius: 4px; border-radius: 4px;
} }
.ext-results:after { #ext-results:after {
content: "Результат"; content: "{% trans 'setup.found_posts' %}";
position: absolute; position: absolute;
top: -1px; top: -1px;
left: -1px; left: -1px;
@ -148,20 +148,22 @@
-moz-border-radius: 4px 0 4px 0; -moz-border-radius: 4px 0 4px 0;
border-radius: 4px 0 4px 0; border-radius: 4px 0 4px 0;
} }
.ext-results pre.prettyprint { #ext-results pre.prettyprint {
display: inline-block; display: inline-block;
margin: 0; margin: 0;
} }
</style> </style>
<div class="ext-results" style="display:block; clear: both"> <div id="ext-results" style="display:none; clear:both">
<ol> <ol>
<li> <li class="ext-result" style="display:none">
<dl> <dl>
<dt>Title:</dt> <dt>{% trans 'setup.title' %}:</dt>
<dd><pre class="prettyprint lang-html">&lt;body&gt;&lt;h1&gt;Hello world!&lt;/h1&gt;&lt;/body&gt;</pre></dd> <dd><pre class="lang-html"></pre></dd>
<dt>Description:</dt> <dt>{% trans 'setup.link' %}:</dt>
<dd><pre class="prettyprint lang-html">&lt;body&gt;&lt;h1&gt;Hello world!&lt;/h1&gt;&lt;/body&gt;</pre></dd> <dd><pre class="lang-html"></pre></dd>
<dt>{% trans 'setup.description' %}:</dt>
<dd><pre class="lang-html"></pre></dd>
</dl> </dl>
</li> </li>
</ol> </ol>

View File

@ -170,9 +170,9 @@ def setup_validate_selectors(request):
if not validated_selectors: if not validated_selectors:
return HttpResponseBadRequest('selectors are invalid') return HttpResponseBadRequest('selectors are invalid')
results, success = build_xpath_results(validated_selectors, file_name) messages, posts, success = build_xpath_results(validated_selectors, file_name)
return HttpResponse(json.dumps({'success': success, 'messages': results})) return HttpResponse(json.dumps({'success': success, 'messages': messages, 'posts': posts}))
def setup_create_feed_ext(request): def setup_create_feed_ext(request):
if request.method == 'POST': if request.method == 'POST':
@ -191,14 +191,14 @@ def setup_create_feed_ext(request):
if not validated_selectors: if not validated_selectors:
return HttpResponseBadRequest('selectors are invalid') return HttpResponseBadRequest('selectors are invalid')
results, success = build_xpath_results(validated_selectors, file_name) messages, posts, success = build_xpath_results(validated_selectors, file_name)
if success: if success:
url = obj['url'] url = obj['url']
feed_id = _create_feed(url, validated_selectors, True) feed_id = _create_feed(url, validated_selectors, True)
return HttpResponse(json.dumps({'success': True, 'url': reverse('preview', args=(feed_id,))})) return HttpResponse(json.dumps({'success': True, 'url': reverse('preview', args=(feed_id,))}))
else: else:
return HttpResponse(json.dumps({'success': False, 'messages': results})) return HttpResponse(json.dumps({'success': False, 'messages': messages}))
def preview(request, feed_id): def preview(request, feed_id):
if request.method == 'GET': if request.method == 'GET':