Commit b3faf308 authored by delanoe's avatar delanoe

Merge branch 'refactoring' into refactoring-ngrams

parents 7a141a02 1dbdb391
...@@ -161,3 +161,9 @@ ...@@ -161,3 +161,9 @@
.float-right { .float-right {
float: right; float: right;
} }
.favactive {
/* yellow */
color: #FFF50D;
text-shadow: -1px 0 #777777, 0 1px #777777, 1px 0 #777777, 0 -1px #777777;
}
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
// dataLoading = signal pour afficher wait // dataLoading = signal pour afficher wait
$scope.dataLoading = true ; $scope.dataLoading = true ;
console.log("annotations.document.DocController.DocumentHttpService.get():before") console.log("annotations.document.DocController.DocumentHttpService.get():before")
$rootScope.documentResource = DocumentHttpService.get( $rootScope.documentResource = DocumentHttpService.get(
...@@ -52,12 +52,64 @@ ...@@ -52,12 +52,64 @@
}]); }]);
annotationsAppDocument.controller('DocFavoriteController', annotationsAppDocument.controller('DocFavoriteController',
['$scope', '$rootScope', 'DocumentHttpService', ['$scope', '$rootScope', 'MainApiFavoritesHttpService',
function ($scope, $rootScope, DocumentHttpService) { function ($scope, $rootScope, MainApiFavoritesHttpService) {
$scope.isFavorite = false;
MainApiFavoritesHttpService.get(
{
'corpusId': $rootScope.corpusId,
'docId': $rootScope.docId
},
function(data) {
if (data['favdocs'].length > 0
&& data['favdocs'][0] == $scope.docId) {
$scope.isFavorite = true ;
}
else {
$scope.isFavorite = false ;
}
},
function(data) {
console.error("unable to check if document belongs to favorites");
$scope.isFavorite = false ;
}
) ;
$scope.onStarClick = function($event) { $scope.onStarClick = function($event) {
console.log($scope.isFavorite)
// console.log($scope)
console.log("TODO"); console.log("TODO");
var myAction ;
if (! $scope.isFavorite) {
// PUT api/nodes/574/favorites?docs=576
myAction = MainApiFavoritesHttpService.put
}
else {
// DELETE api/nodes/574/favorites?docs=576
myAction = MainApiFavoritesHttpService.delete
}
// (1) do the action
myAction(
{
'corpusId': $rootScope.corpusId,
'docId': $rootScope.docId
},
// success
function(data) {
// (2) toggle status and refresh
$scope.isFavorite = ! $scope.isFavorite
$rootScope.refreshDisplay();
},
// failure
function(data) {
console.error("unable to change favorite status");
}
);
}; };
$scope.isFavorite = false;
}]); }]);
})(window); })(window);
...@@ -122,4 +122,49 @@ ...@@ -122,4 +122,49 @@
} }
); );
}); });
/*
* MainApiFavoritesHttpService: Check/Add/Del Document in favorites
* ============================
* route: api/nodes/574/favorites?docs=576
* /!\ for this route we reach out of this annotation module
* and send directly to the gargantext api route for favs
* (cross origin request with http protocol scheme)
* ------
*
* exemple:
* --------
* {
* "favdocs": [576] // <== if doc is among favs
* "missing": [] // <== if doc is not in favs
* }
*
*/
http.factory('MainApiFavoritesHttpService', function($resource) {
return $resource(
// adding explicit "http://" b/c this a cross origin request
'http://' + window.GARG_ROOT_URL + "/api/nodes/:corpusId/favorites?docs=:docId",
{
corpusId: '@corpusId',
docId: '@docId'
},
{
get: {
method: 'GET',
params: {corpusId: '@corpusId', docId: '@docId'}
},
put: {
method: 'PUT',
params: {corpusId: '@corpusId', docId: '@docId'}
},
delete: {
method: 'DELETE',
params: {corpusId: '@corpusId', docId: '@docId'}
}
}
);
});
})(window); })(window);
...@@ -58,9 +58,9 @@ ...@@ -58,9 +58,9 @@
<div class="list-selector"> <div class="list-selector">
<h5>Select lists</h5> <h5>Select lists</h5>
<select class="selectpicker" multiple ng-change="activeListsChange()" ng-model="lists" ng-controller="ActiveListsController"> <select class="selectpicker" multiple ng-change="activeListsChange()" ng-model="lists" ng-controller="ActiveListsController">
<option ng-repeat="item in allListsSelect" id="list---{[{item.id}]}">{[{item.label}]}</option> <option ng-repeat="item in allListsSelect" id="list---{[{item.id}]}">{[{item.label}]}</option>
<!-- to disallow unchecking MapList add this into <option> element: ng-disabled="{[{ item.label == 'MapList' }]}" --> <!-- to disallow unchecking MapList add this into <option> element: ng-disabled="{[{ item.label == 'MapList' }]}" -->
</select> </select>
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
</div> </div>
<div class="col-md-2 col-xs-2 clearfix"> <div class="col-md-2 col-xs-2 clearfix">
<button ng-controller="DocFavoriteController" type="button" class="btn btn-default float-right" ng-click="onStarClick($event)"> <button ng-controller="DocFavoriteController" type="button" class="btn btn-default float-right" ng-click="onStarClick($event)">
<span class="glyphicon" ng-class="{'glyphicon-star-empty': isFavorite == false, 'glyphicon-star': isFavorite == true}"></span> <span class="glyphicon" ng-class="{'glyphicon-star-empty': isFavorite == false, 'glyphicon-star favactive': isFavorite == true}"></span>
</button> </button>
<!--<nav> <!--<nav>
<ul class="pager"> <ul class="pager">
...@@ -129,6 +129,7 @@ ...@@ -129,6 +129,7 @@
/* Constants required for annotations app JS to work */ /* Constants required for annotations app JS to work */
window.STATIC_URL = "{% static '' %}"; window.STATIC_URL = "{% static '' %}";
window.ANNOTATION_API_URL = "{{ api_url }}"; window.ANNOTATION_API_URL = "{{ api_url }}";
window.GARG_ROOT_URL = "{{ garg_url }}";
window.NODES_API_URL = "{{ nodes_api_url }}"; window.NODES_API_URL = "{{ nodes_api_url }}";
</script> </script>
<script src="{% static 'annotations/main.js' %}"></script> <script src="{% static 'annotations/main.js' %}"></script>
......
...@@ -5,13 +5,14 @@ from annotations import views ...@@ -5,13 +5,14 @@ from annotations import views
# /!\ urls patterns here are *without* the trailing slash # /!\ urls patterns here are *without* the trailing slash
urlpatterns = [ urlpatterns = [
# json:title,id,authors,journal, # GET [DocumentHttpService]
# json:title,id,authors,journal,
# publication_date # publication_date
# abstract_text,full_text # abstract_text,full_text
url(r'^documents/(?P<doc_id>[0-9]+)$', views.Document.as_view()), # document view url(r'^documents/(?P<doc_id>[0-9]+)$', views.Document.as_view()), # document view
# GET: # GET [NgramListHttpService]
# was : lists ∩ document (ngram_ids intersection if connected to list node_id and doc node_id) # was : lists ∩ document (ngram_ids intersection if connected to list node_id and doc node_id)
# fixed 2016-01: just lists (because document doesn't get updated by POST create cf. ngram.lists.DocNgram filter commented) # fixed 2016-01: just lists (because document doesn't get updated by POST create cf. ngram.lists.DocNgram filter commented)
url(r'^corpora/(?P<corpus_id>[0-9]+)/documents/(?P<doc_id>[0-9]+)$', views.NgramList.as_view()), # the list associated with an ngram url(r'^corpora/(?P<corpus_id>[0-9]+)/documents/(?P<doc_id>[0-9]+)$', views.NgramList.as_view()), # the list associated with an ngram
......
...@@ -30,6 +30,7 @@ def main(request, project_id, corpus_id, document_id): ...@@ -30,6 +30,7 @@ def main(request, project_id, corpus_id, document_id):
return render_to_response('annotations/main.html', { return render_to_response('annotations/main.html', {
# TODO use reverse() # TODO use reverse()
'api_url': urljoin(request.get_host(), '/annotations/'), 'api_url': urljoin(request.get_host(), '/annotations/'),
'garg_url': request.get_host(),
'nodes_api_url': urljoin(request.get_host(), '/api/'), 'nodes_api_url': urljoin(request.get_host(), '/api/'),
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
......
...@@ -26,7 +26,7 @@ from annotations.views import main as annotations_main_view ...@@ -26,7 +26,7 @@ from annotations.views import main as annotations_main_view
import graphExplorer.urls import graphExplorer.urls
# Module Scrapers # Module Scrapers
import scrapers.urls import moissonneurs.urls
urlpatterns = [ url(r'^admin/' , admin.site.urls ) urlpatterns = [ url(r'^admin/' , admin.site.urls )
...@@ -43,6 +43,6 @@ urlpatterns = [ url(r'^admin/' , admin.site.urls ) ...@@ -43,6 +43,6 @@ urlpatterns = [ url(r'^admin/' , admin.site.urls )
, url(r'^annotations/', include( annotations_urls ) ) , url(r'^annotations/', include( annotations_urls ) )
, url(r'^projects/(\d+)/corpora/(\d+)/documents/(\d+)/$', annotations_main_view) , url(r'^projects/(\d+)/corpora/(\d+)/documents/(\d+)/$', annotations_main_view)
# Module Scrapers # Module Scrapers (Moissonneurs in French)
, url(r'^scrapers/' , include( scrapers.urls ) ) , url(r'^moissonneurs/' , include( moissonneurs.urls ) )
] ]
This diff is collapsed.
...@@ -15,7 +15,7 @@ from gargantext.util.http import JsonHttpResponse ...@@ -15,7 +15,7 @@ from gargantext.util.http import JsonHttpResponse
from gargantext.util.scheduling import scheduled from gargantext.util.scheduling import scheduled
from gargantext.util.toolchain import parse_extract_indexhyperdata from gargantext.util.toolchain import parse_extract_indexhyperdata
from scrapers.util import Scraper from moissonneurs.util import Scraper
......
...@@ -26,7 +26,7 @@ from gargantext.util.http import JsonHttpResponse ...@@ -26,7 +26,7 @@ from gargantext.util.http import JsonHttpResponse
from gargantext.util.scheduling import scheduled from gargantext.util.scheduling import scheduled
from gargantext.util.toolchain import parse_extract_indexhyperdata from gargantext.util.toolchain import parse_extract_indexhyperdata
from scrapers.util import Scraper from moissonneurs.util import Scraper
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
# #
# Scrapers == getting data from external databases # moissonneurs == getting data from external databases
# Available databases : # Available databases :
...@@ -18,19 +18,19 @@ ...@@ -18,19 +18,19 @@
from django.conf.urls import url from django.conf.urls import url
import scrapers.pubmed as pubmed import moissonneurs.pubmed as pubmed
import scrapers.istex as istex import moissonneurs.istex as istex
# TODO # TODO
#import scrapers.cern as cern #import moissonneurs.cern as cern
# TODO # TODO
#import scrapers.hal as hal #import moissonneurs.hal as hal
#import scrapers.revuesOrg as revuesOrg #import moissonneurs.revuesOrg as revuesOrg
# TODO ? # TODO ?
# REST API for the scrapers # REST API for the moissonneurs
# /!\ urls patterns here are *without* the trailing slash # /!\ urls patterns here are *without* the trailing slash
urlpatterns = [ url(r'^pubmed/query$' , pubmed.query ) urlpatterns = [ url(r'^pubmed/query$' , pubmed.query )
......
...@@ -143,6 +143,7 @@ var RecDict={}; ...@@ -143,6 +143,7 @@ var RecDict={};
var AjaxRecords = [] var AjaxRecords = []
var Garbage = {} var Garbage = {}
var countByTitles = {} // useful for title duplicates var countByTitles = {} // useful for title duplicates
var favorites = {}
function getRecord(rec_id) { function getRecord(rec_id) {
return MyTable.data('dynatable').settings.dataset.originalRecords[rec_id]; return MyTable.data('dynatable').settings.dataset.originalRecords[rec_id];
...@@ -153,6 +154,39 @@ function getRecords() { ...@@ -153,6 +154,39 @@ function getRecords() {
return MyTable.data('dynatable').settings.dataset.originalRecords; return MyTable.data('dynatable').settings.dataset.originalRecords;
} }
function favstatusToStar (rec_id, boolFavstatus, boolStrike=false){
var starStr = boolFavstatus ? "glyphicon-star" : "glyphicon-star-empty";
var styleStr = boolStrike ? "style='text-decoration:line-through'" : "";
var htmlStr = "<span class='glyphicon "+starStr+"' "+styleStr ;
htmlStr += " onclick='toggleFavstatus("+rec_id+")'" ;
htmlStr += ">" ;
htmlStr += "</span>" ;
return htmlStr
}
function toggleFavstatus (rec_id) {
var doc_id = AjaxRecords[rec_id]["id"]
var statusBefore = AjaxRecords[rec_id]["isFavorite"]
var myHttpAction = statusBefore ? 'DELETE' : 'PUT'
$.ajax({
url: 'http://localhost:8000/api/nodes/'+corpus_id+'/favorites?docs='+doc_id,
type: myHttpAction,
beforeSend: function(xhr) {
xhr.setRequestHeader("X-CSRFToken", getCookie("csrftoken"));
},
success: function(favdata) {
// it's been toggled in the DB so we toggle locally
if (statusBefore) delete favorites[doc_id]
else favorites[doc_id] = true
AjaxRecords[rec_id]["isFavorite"] = ! statusBefore ;
// and we reprocess table directly (no need for new ajax of other recs)
MyTable.data('dynatable').process();
},
});
}
function transformContent2(rec_id) { function transformContent2(rec_id) {
// pr("\t\ttransformContent2: "+rec_id) // pr("\t\ttransformContent2: "+rec_id)
var elem = AjaxRecords[rec_id]; var elem = AjaxRecords[rec_id];
...@@ -162,12 +196,14 @@ function transformContent2(rec_id) { ...@@ -162,12 +196,14 @@ function transformContent2(rec_id) {
result["id"] = elem["id"] result["id"] = elem["id"]
result["date"] = '<strike>'+elem["date"]+'</strike>' result["date"] = '<strike>'+elem["date"]+'</strike>'
result["docurl"] = '<strike>'+elem["docurl"]+'</strike>' result["docurl"] = '<strike>'+elem["docurl"]+'</strike>'
result["isFavorite"] = favstatusToStar(rec_id, elem["isFavorite"], boolStrike=true)
result["rawtitle"] = elem["rawtitle"] result["rawtitle"] = elem["rawtitle"]
result["del"] = '<input id='+rec_id+' onclick="overRide(this)" type="checkbox" checked/>' result["del"] = '<input id='+rec_id+' onclick="overRide(this)" type="checkbox" checked/>'
} else { } else {
result["id"] = elem["id"] result["id"] = elem["id"]
result["date"] = elem["date"] result["date"] = elem["date"]
result["docurl"] = elem["docurl"] result["docurl"] = elem["docurl"]
result["isFavorite"] = favstatusToStar(rec_id, elem["isFavorite"])
result["rawtitle"] = elem["rawtitle"] result["rawtitle"] = elem["rawtitle"]
result["del"] = '<input id='+rec_id+' onclick="overRide(this)" type="checkbox"/>' result["del"] = '<input id='+rec_id+' onclick="overRide(this)" type="checkbox"/>'
} }
...@@ -269,6 +305,9 @@ function Main_test(Data) { ...@@ -269,6 +305,9 @@ function Main_test(Data) {
div_table += "\t"+"\t"+'<span class="glyphicon glyphicon-calendar"></span> Date</th>'+"\n" div_table += "\t"+"\t"+'<span class="glyphicon glyphicon-calendar"></span> Date</th>'+"\n"
div_table += "\t"+"\t"+'<th data-dynatable-column="docurl">'+"\n" div_table += "\t"+"\t"+'<th data-dynatable-column="docurl">'+"\n"
div_table += "\t"+"\t"+'<span class="glyphicon glyphicon-text-size"></span> Title</th>'+"\n" div_table += "\t"+"\t"+'<span class="glyphicon glyphicon-text-size"></span> Title</th>'+"\n"
div_table += "\t"+"\t"+'<th data-dynatable-column="isFavorite">'+"\n"
div_table += "\t"+"\t"+'<span class="glyphicon glyphicon-star"></span>'+"\n"
div_table += "\t"+"\t"+'</th>'+"\n"
div_table += "\t"+"\t"+'<th data-dynatable-column="del" data-dynatable-no-sort="true">'+"\n" div_table += "\t"+"\t"+'<th data-dynatable-column="del" data-dynatable-no-sort="true">'+"\n"
div_table += "\t"+"\t"+'<span class="glyphicon glyphicon-trash"></span>'+"\n" div_table += "\t"+"\t"+'<span class="glyphicon glyphicon-trash"></span>'+"\n"
div_table += "\t"+"\t"+'</th>'+"\n" div_table += "\t"+"\t"+'</th>'+"\n"
...@@ -445,7 +484,7 @@ function Main_test(Data) { ...@@ -445,7 +484,7 @@ function Main_test(Data) {
}, },
inputs: { inputs: {
// our own search which differentiates title vs abstract queries // our own search which differentiates title vs abstract queries
queries: $('#doubleSearch, #dupFilter') queries: $('#doubleSearch, #docFilter')
}, },
writers: { writers: {
_rowWriter: ulWriter _rowWriter: ulWriter
...@@ -495,14 +534,16 @@ function Main_test(Data) { ...@@ -495,14 +534,16 @@ function Main_test(Data) {
} }
// MyTable.data('dynatable').process(); // MyTable.data('dynatable').process();
// also append another bound filter for duplicates // also append another bound filter for duplicates/favorites
MyTable.data('dynatable').queries MyTable.data('dynatable').queries
.functions['dupFilter'] = function(record,selected) { .functions['docFilter'] = function(record,opt) {
return (selected == 'filter_all')||(countByTitles[record.rawtitle] > 1) if (opt == 'filter_all') return true
else if (opt == 'filter_favs') return favorites[record.id]
else if (opt == 'filter_dupl') return (countByTitles[record.rawtitle] > 1)
} }
// and set this filter's initial status to 'filter_all' // and set this filter's initial status to 'filter_all'
MyTable.data('dynatable').settings.dataset.queries['dupFilter'] = 'filter_all' MyTable.data('dynatable').settings.dataset.queries['docFilter'] = 'filter_all'
MyTable.data('dynatable').sorts.functions["rawtitleSort"] = function testSort (rec1,rec2) { MyTable.data('dynatable').sorts.functions["rawtitleSort"] = function testSort (rec1,rec2) {
...@@ -531,20 +572,20 @@ function Main_test(Data) { ...@@ -531,20 +572,20 @@ function Main_test(Data) {
var dupFlag = false ; var dupFlag = false ;
$("#div-table").on("dynatable:queries:added", function(e, qname, qval) { $("#div-table").on("dynatable:queries:added", function(e, qname, qval) {
if (!dupFlag && qname == 'dupFilter' && qval == "filter_dupl") { if (!dupFlag && qname == 'docFilter' && qval == "filter_dupl") {
MyTable.data('dynatable').queries.remove('dupFilter') MyTable.data('dynatable').queries.remove('docFilter')
// to avoid recursion when we'll call this filter again in 4 lines // to avoid recursion when we'll call this filter again in 4 lines
dupFlag = true ; dupFlag = true ;
// sort alphabetically **before** duplicates filter // sort alphabetically **before** duplicates filter
MyTable.data('dynatable').sorts.clear(); MyTable.data('dynatable').sorts.clear();
MyTable.data('dynatable').sorts.add('rawtitle', -1) // -1 <==> DESC (ASC doesn't work well ?) MyTable.data('dynatable').sorts.add('rawtitle', -1) // -1 <==> DESC (ASC doesn't work well ?)
MyTable.data('dynatable').queries.add('dupFilter', 'filter_dupl') MyTable.data('dynatable').queries.add('docFilter', 'filter_dupl')
MyTable.data('dynatable').process(); MyTable.data('dynatable').process();
} }
}); });
$("#div-table").on("dynatable:queries:removed", function(e, qname) { $("#div-table").on("dynatable:queries:removed", function(e, qname) {
if (qname == 'dupFilter') { if (qname == 'docFilter') {
dupFlag = false ; dupFlag = false ;
} }
}); });
...@@ -556,36 +597,53 @@ $.ajax({ ...@@ -556,36 +597,53 @@ $.ajax({
url: '/api/nodes?types[]=DOCUMENT&pagination_limit=-1&parent_id=' url: '/api/nodes?types[]=DOCUMENT&pagination_limit=-1&parent_id='
+ corpus_id + corpus_id
+'&fields[]=parent_id&fields[]=id&fields[]=name&fields[]=typename&fields[]=hyperdata', +'&fields[]=parent_id&fields[]=id&fields[]=name&fields[]=typename&fields[]=hyperdata',
success: function(data){ success: function(maindata){
$("#content_loader").remove(); // unfortunately favorites info is in a separate request (other nodes)
$.each(data.records, function(i, record){ $.ajax({
var orig_id = parseInt(record.id); url: 'http://localhost:8000/api/nodes/'+corpus_id+'/favorites',
var arr_id = parseInt(i) success: function(favdata){
RecDict[orig_id] = arr_id; // initialize favs lookup
record.rawtitle = record.name; for (var i in favdata['favdocs']) {
doc_id = favdata['favdocs'][i]
// trick to have a clickable title in docurl slot, but could be done in transformContent2 favorites[doc_id] = true ;
record.docurl = '<a target="_blank" href="/projects/' + project_id + '/corpora/'+ corpus_id + '/documents/' + record.id + '">' + record.name + '</a>'; }
record.date = get_node_date(record);
record.del = false;
});
// initialize CountByTitle census // now process the nodes data from 1st request
for (var i in data.records) { $.each(maindata.records, function(i, record){
ourTitle = data.records[i]['rawtitle'] ; var orig_id = parseInt(record.id);
if (countByTitles.hasOwnProperty(ourTitle)) { var arr_id = parseInt(i)
countByTitles[ourTitle] ++ ; RecDict[orig_id] = arr_id;
} record.rawtitle = record.name;
else {
countByTitles[ourTitle] = 1 ;
}
}
AjaxRecords = data.records; // backup-ing in global variable!
var result = Main_test(data.records) record.isFavorite = false ;
if (favorites[orig_id]) {
record.isFavorite = true ;
}
$("#content_loader").remove() // trick to have a clickable title in docurl slot, but could be done in transformContent2
record.docurl = '<a target="_blank" href="/projects/' + project_id + '/corpora/'+ corpus_id + '/documents/' + record.id + '">' + record.name + '</a>';
record.date = get_node_date(record);
record.del = false;
});
console.log( result ) // initialize CountByTitle census
for (var i in maindata.records) {
ourTitle = maindata.records[i]['rawtitle'] ;
if (countByTitles.hasOwnProperty(ourTitle)) {
countByTitles[ourTitle] ++ ;
}
else {
countByTitles[ourTitle] = 1 ;
}
}
AjaxRecords = maindata.records; // backup-ing in global variable!
$("#content_loader").remove();
var result = Main_test(maindata.records)
console.log( result )
},
});
}, },
}); });
...@@ -290,7 +290,7 @@ function Main_test( data , initial) { ...@@ -290,7 +290,7 @@ function Main_test( data , initial) {
var div_table = '<p align="right">'+"\n" var div_table = '<p align="right">'+"\n"
div_table += '<table id="my-ajax-table" class="table table-bordered table-hover">'+"\n" div_table += '<table id="my-ajax-table" class="table table-bordered table-hover">'+"\n"
div_table += "\t"+'<thead>'+"\n" div_table += "\t"+'<thead>'+"\n"
div_table += "\t"+"\t"+'<th data-dynatable-column="name">Title</th>'+"\n" div_table += "\t"+"\t"+'<th data-dynatable-column="name"><span class="glyphicon glyphicon-text-size"></span> Title</th>'+"\n"
div_table += "\t"+"\t"+'<th data-dynatable-column="score" data-dynatable-sorts="score">No. Pubs</th>'+"\n" div_table += "\t"+"\t"+'<th data-dynatable-column="score" data-dynatable-sorts="score">No. Pubs</th>'+"\n"
// div_table += "\t"+"\t"+'<th id="score_column_id" data-dynatable-sorts="score" data-dynatable-column="score">Score</th>'+"\n" // div_table += "\t"+"\t"+'<th id="score_column_id" data-dynatable-sorts="score" data-dynatable-column="score">Score</th>'+"\n"
div_table += "\t"+"\t"+'</th>'+"\n" div_table += "\t"+"\t"+'</th>'+"\n"
......
...@@ -59,9 +59,12 @@ ...@@ -59,9 +59,12 @@
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h4 class="panel-title"> <h2 class="panel-title">
Publications by source <center>
</h4> <span class="glyphicon glyphicon-hand-down" aria-hidden="true"></span>
Publications by source
</center>
</h2>
</div> </div>
......
...@@ -55,12 +55,15 @@ ...@@ -55,12 +55,15 @@
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h4 class="panel-title"> <h2 class="panel-title">
<center>
<span class="glyphicon glyphicon-hand-down" aria-hidden="true"></span>
Extracted terms Extracted terms
<!-- <button title='run test function' onclick="doATest()"> <!-- <button title='run test function' onclick="doATest()">
TEST TEST
</button> --> </button> -->
</a> </center>
</h2>
<!-- see in javascript function queries.functions['my_state_filter'] --> <!-- see in javascript function queries.functions['my_state_filter'] -->
<div class="pull-left" style="margin-top:1.85em;"> <div class="pull-left" style="margin-top:1.85em;">
......
...@@ -54,9 +54,12 @@ ...@@ -54,9 +54,12 @@
<div class="jumbotron"> <div class="jumbotron">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h4 class="panel-title"> <h2 class="panel-title">
Publications by title <center>
</h4> <span class="glyphicon glyphicon-hand-down" aria-hidden="true"></span>
Publications by title
</center>
</h2>
<!-- search box with custom function in Docs_dyna_chart_and_tables.js --> <!-- search box with custom function in Docs_dyna_chart_and_tables.js -->
<div class="pull-left" style="margin-top:1.85em; font-size: 16px;"> <div class="pull-left" style="margin-top:1.85em; font-size: 16px;">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span> <span class="glyphicon glyphicon-search" aria-hidden="true"></span>
...@@ -70,9 +73,10 @@ ...@@ -70,9 +73,10 @@
<input title="Search in Abstracts" id="searchAB" name="searchAB" type="checkbox">AB <input title="Search in Abstracts" id="searchAB" name="searchAB" type="checkbox">AB
</span>&nbsp;&nbsp; </span>&nbsp;&nbsp;
<span class="glyphicon glyphicon-filter" aria-hidden="true"></span> <span class="glyphicon glyphicon-filter" aria-hidden="true"></span>
<select id="dupFilter" name="dupFilter"> <select id="docFilter" name="docFilter">
<option value="filter_all">All</option> <option value="filter_all">All</option>
<option value="filter_dupl">Duplicates by Title</option> <option value="filter_favs">Favorite documents</option>
<option value="filter_dupl">Duplicates by title</option>
</select> </select>
</div> </div>
</div> </div>
......
...@@ -111,14 +111,26 @@ ...@@ -111,14 +111,26 @@
</a> </a>
<i class="caret"></i> <i class="caret"></i>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li> {% if view != "graph" %}
<a tabindex="-1" <li>
data-url="/projects/{{project.id}}/corpora/{{ corpus.id }}/explorer?field1=ngrams&amp;field2=ngrams&amp;distance=conditional&amp;bridgeness=5" onclick='gotoexplorer(this)' >With conditional distance </a> <a tabindex="-1"
</li> data-url="/projects/{{project.id}}/corpora/{{ corpus.id }}/explorer?field1=ngrams&amp;field2=ngrams&amp;distance=conditional&amp;bridgeness=5" onclick='gotoexplorer(this)' >With conditional distance </a>
<li> </li>
<a tabindex="-1" <li>
data-url="/projects/{{project.id}}/corpora/{{ corpus.id }}/explorer?field1=ngrams&amp;field2=ngrams&amp;distance=distributional&amp;bridgeness=5" onclick='gotoexplorer(this)' >With distributional distance</a> <a tabindex="-1"
</li> data-url="/projects/{{project.id}}/corpora/{{ corpus.id }}/explorer?field1=ngrams&amp;field2=ngrams&amp;distance=distributional&amp;bridgeness=5" onclick='gotoexplorer(this)' >With distributional distance</a>
</li>
{% else %}
<li>
<a tabindex="-1"
href="/projects/{{project.id}}/corpora/{{ corpus.id }}/explorer?field1=ngrams&amp;field2=ngrams&amp;distance=conditional&amp;bridgeness=5" >With conditional distance </a>
</li>
<li>
<a tabindex="-1"
href="/projects/{{project.id}}/corpora/{{ corpus.id }}/explorer?field1=ngrams&amp;field2=ngrams&amp;distance=distributional&amp;bridgeness=5">With distributional distance</a>
</li>
{% endif %}
</ul> </ul>
</li> </li>
{% endif %} {% endif %}
...@@ -138,52 +150,42 @@ ...@@ -138,52 +150,42 @@
<div class="jumbotron" style="margin-bottom:0"> <div class="jumbotron" style="margin-bottom:0">
<br> <br>
<br> <br>
<!--
<a type="button" class="btn btn-default
href="/projects/{{project.id}}/corpora/{{ corpus.id }}/">Export corpus</a>
--!>
<!-- <li class="divider"></li> --!>
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-3">
{% if project %} <h3>
<h3><a href="/projects/{{project.id}}"> <a href="/projects/{{project.id}}">
<span class="glyphicon glyphicon-book" aria-hidden="true"></span> <span class="glyphicon glyphicon-book" aria-hidden="true"></span>
{{ project.name }} {{ project.name | truncatechars:15}}
</a> </a>
<br>
<span class="glyphicon glyphicon-cd" aria-hidden="true"></span>
{{ resourcename | truncatechars:20 }}
<br>
<span class="glyphicon glyphicon-file" aria-hidden="true"></span>
{{ corpus.name }}
<br>
<span class="glyphicon glyphicon-calendar" aria-hidden="true"></span>
{{ corpus.date }}
</h3> </h3>
{% endif %}
</div> </div>
<div class="col-md-4"> <div class="col-md-5">
<h3>
<span class="glyphicon glyphicon-cd" aria-hidden="true"></span>
{{ resourcename | truncatechars:20 }}
</h3>
<h3>
<span class="glyphicon glyphicon-file" aria-hidden="true"></span>
{{ corpus.name | truncatechars:20 }}
<a class="btn btn-default" role="button" href="/api/nodes?parent_id={{corpus.id}}&types[]=DOCUMENT&pagination_limit=100000&formated=csv">
<span class="glyphicon glyphicon-download" aria-hidden="true"></span>
</a>
</h3>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<br> <h3>
<!-- <a class="btn btn-default" role="button" href="/project/{{project.id}}/corpus/{{corpus.id}}/{{view}}/update">Update</a> --> <span class="glyphicon glyphicon-calendar" aria-hidden="true"></span> {{ corpus.date }}
<!-- </h3>
<a class="btn btn-default" role="button" href="/project/{{project.id}}/corpus/{{ corpus.id }}/corpus.csv">Download</a> <h3>
<span class="glyphicon glyphicon-user" aria-hidden="true"></span>
<a type="button" class="btn btn-default" data-container="body" data-toggle="popover" data-placement="bottom" Author(s):
data-content=' </h3>
<ul> <h4>
<li> Rename </li> {{ user.username | truncatechars:15}}
<li> Add new documents </li> </h4>
<li><a href="/delete/{{corpus.id}}">Delete</a></li>
</ul>
'>Manage</a>
-->
<!-- <a class="btn btn-primary btn-lg" role="button" href="/admin/documents/corpus/{{ corpus.id }}/">Add documents</a></p> -->
</div> </div>
</div> </div>
</div>
</div> </div>
</div> </div>
{% else %} {% else %}
......
...@@ -78,6 +78,7 @@ ...@@ -78,6 +78,7 @@
<div id="project_{{project.id}}" class="row"> <div id="project_{{project.id}}" class="row">
<h3> <h3>
<div class="col-md-1 content"></div>
<div class="col-md-5 content"> <div class="col-md-5 content">
<a <a
href="/projects/{{ project.id }}"> href="/projects/{{ project.id }}">
......
...@@ -73,6 +73,7 @@ ...@@ -73,6 +73,7 @@
{% for key, corpora in list_corpora.items %} {% for key, corpora in list_corpora.items %}
<h2> <h2>
<div class="row"> <div class="row">
<div class="col-md-1 content"></div>
<span class="glyphicon glyphicon-cd" aria-hidden="true"></span> <span class="glyphicon glyphicon-cd" aria-hidden="true"></span>
{{ key }} {{ key }}
</h2> </h2>
...@@ -80,6 +81,7 @@ ...@@ -80,6 +81,7 @@
<div id="corpus_{{corpus.id}}"> <div id="corpus_{{corpus.id}}">
<div class="row"> <div class="row">
<h4> <h4>
<div class="col-md-1 content"></div>
<div class="col-md-5 content"> <div class="col-md-5 content">
<a href="/projects/{{project.id}}/corpora/{{corpus.id}}"> <a href="/projects/{{project.id}}/corpora/{{corpus.id}}">
<span class="glyphicon glyphicon-file" aria-hidden="true"></span> <span class="glyphicon glyphicon-file" aria-hidden="true"></span>
...@@ -109,7 +111,7 @@ ...@@ -109,7 +111,7 @@
</button> </button>
</div> </div>
<div class="col-md-5 content"> <div class="col-md-4 content">
{% for state in corpus.hyperdata.statuses %} {% for state in corpus.hyperdata.statuses %}
{% ifequal state.action "ngrams_extraction" %} {% ifequal state.action "ngrams_extraction" %}
{% if state.complete %} {% if state.complete %}
...@@ -293,7 +295,7 @@ ...@@ -293,7 +295,7 @@
$.ajax({ $.ajax({
// contentType: "application/json", // contentType: "application/json",
url: window.location.origin+"/scrapers/pubmed/save/"+projectid, url: window.location.origin+"/moissonneurs/pubmed/save/"+projectid,
data: pubmedifiedQuery, data: pubmedifiedQuery,
type: 'POST', type: 'POST',
beforeSend: function(xhr) { beforeSend: function(xhr) {
...@@ -365,7 +367,7 @@ ...@@ -365,7 +367,7 @@
if(theType=="Pubmed (XML format)") { if(theType=="Pubmed (XML format)") {
$.ajax({ $.ajax({
// contentType: "application/json", // contentType: "application/json",
url: window.location.origin+"/scrapers/pubmed/query", url: window.location.origin+"/moissonneurs/pubmed/query",
data: formData, data: formData,
type: 'POST', type: 'POST',
beforeSend: function(xhr) { beforeSend: function(xhr) {
...@@ -403,10 +405,10 @@ ...@@ -403,10 +405,10 @@
} }
if(theType=="ISTex") { if(theType=="ISTex") {
console.log(window.location.origin+"scrapers/istex/query") console.log(window.location.origin+"moissonneurs/istex/query")
$.ajax({ $.ajax({
// contentType: "application/json", // contentType: "application/json",
url: window.location.origin+"/scrapers/istex/query", url: window.location.origin+"/moissonneurs/istex/query",
data: formData, data: formData,
type: 'POST', type: 'POST',
beforeSend: function(xhr) { beforeSend: function(xhr) {
...@@ -537,7 +539,7 @@ ...@@ -537,7 +539,7 @@
$.ajax({ $.ajax({
// contentType: "application/json", // contentType: "application/json",
url: window.location.origin+"/scrapers/istex/save/"+projectid, url: window.location.origin+"/moissonneurs/istex/save/"+projectid,
data: postQuery, data: postQuery,
type: 'POST', type: 'POST',
beforeSend: function(xhr) { beforeSend: function(xhr) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment