Commit dc10840a authored by Romain Loth's avatar Romain Loth

Ngrams table is ok: new menufilter for maplist + fix pagination bug +...

Ngrams table is ok: new menufilter for maplist + fix pagination bug + strikethrough for stoplist + css
parent 64fc3681
......@@ -3,6 +3,8 @@ For initial ngram groups via stemming
Exemple:
- groups['copper engrav'] = {'copper engraving':3, 'coppers engraver':1...}
- groups['post'] = {'poste':3, 'poster':5, 'postés':2...}
TODO use groups for aggregated occurrences/coocs counts !
"""
from gargantext.models import Node, NodeNgramNgram
......
......@@ -411,10 +411,19 @@ class ListFamily(APIView):
links = Translations(groups_id)
linkinfo = links.groups
# the output form
for ng in mainlist_query.all() + hidden_ngrams_query.all():
# list of
ngrams_which_need_detailed_info = []
if "head" in parameters:
# head triggered simplified form: just the top of the mainlist
# TODO add maplist membership
ngrams_which_need_detailed_info = mainlist_query.all()
else:
ngrams_which_need_detailed_info = mainlist_query.all() + hidden_ngrams_query.all()
# the output form of details is:
# ngraminfo[id] => [term, weight]
for ng in ngrams_which_need_detailed_info:
ng_id = ng[0]
# id => [term, weight]
ngraminfo[ng_id] = ng[1:]
# NB the client js will sort mainlist ngs from hidden ngs after ajax
......
......@@ -22,6 +22,19 @@ th a {
font-size: 0.7em;
}
#dynatable-query-search-my-ajax-table {
min-width: 20em;
}
.dynatable-search {
margin-left: 2em;
font-size: 16px;
}
.dynatable-per-page-label {
margin-left: 2em;
font-size: 16px;
}
#corpusdisplayer {
width:200px;
margin:0 auto;
......@@ -77,9 +90,11 @@ tr:hover {
.delete {
color:red;
opacity: 0.8;
text-decoration: line-through;
}
.keep {
color:green;
font-style: italic;
}
.group {
......
......@@ -391,7 +391,7 @@ function saveActiveGroup() {
for (downgradedNgramId in activeGroup.were_mainforms) {
if (downgradedNgramId != mainform) {
// AjaxRecords[downgradedNgramId].state = -1
AjaxRecords[downgradedNgramId].state = -1
// they go to nodesmemory
// NGrams.group.nodesmemory = AjaxRecords[downgradedNgramId]
......@@ -413,11 +413,11 @@ function saveActiveGroup() {
}
}
// clean group modification zone and buffer
removeActiveGroup()
// clean group modification zone and buffer and update table
removeActiveGroupFrame()
}
function removeActiveGroup() {
function removeActiveGroupFrame() {
// erases now_links and restores empty activeGroup global cache
activeGroup = {'now_mainform_id':undefined, 'were_mainforms':{}} ;
......@@ -428,6 +428,7 @@ function removeActiveGroup() {
// we also close the open sublists in case some of them don't exist any more
vizopenGroup = {}
// reprocess from current record states
MyTable.data('dynatable').dom.update();
}
......@@ -553,7 +554,7 @@ function drawActiveGroup (tgtElementId, mainformId, linkIdsArray, ngInfos) {
groupHtml += '\n <p id="activeGroupButtons">';
// Ok - No
var cancelGroupButton = '<button onclick="removeActiveGroup()">' ;
var cancelGroupButton = '<button onclick="removeActiveGroupFrame()">' ;
cancelGroupButton += 'cancel' ;
cancelGroupButton += '</button>' ;
......@@ -655,7 +656,7 @@ function makeMainform(ngramId) {
function removeSubform(ngramId) {
$('#active-subform-'+ngramId).remove()
if (activeGroup.now_links.length == 1) {
removeActiveGroup()
removeActiveGroupFrame()
}
else {
// clean were_mainforms dict
......@@ -998,7 +999,9 @@ function ulWriter(rowIndex, record, columns, cellWriter) {
if( typeof AjaxRecords[record.id] == "undefined") {
console.log('/!\\ nothing for ' + record.id)
return false;
} else if( AjaxRecords[record.id].state < 0 ) {
}
// erase state <= 0
else if( AjaxRecords[record.id].state < 0 ) {
// therefore state -1 ngrams will not be drawn
return false;
}
......@@ -1488,9 +1491,6 @@ function MainTableAndCharts( data , initial , search_filter) {
// uncomment for column stateId (here and in transformContent - l.580)
// div_table += "\t"+"\t"+'<th data-dynatable-column="state" style="background-color:grey">State</th>'+"\n" ;
div_table += "\t"+"\t"+'<th data-dynatable-column="name">Terms</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";
// selector columns... not sortable to allow 'click => check all'
div_table += "\t"+"\t"+'<th data-dynatable-column="will_be_map"'
+ ' data-dynatable-no-sort="true"'
......@@ -1516,6 +1516,10 @@ function MainTableAndCharts( data , initial , search_filter) {
+ '<label>All</label>'
+ '</p>'
+ '</th>'+"\n" ;
// main name and score columns
div_table += "\t"+"\t"+'<th data-dynatable-column="name">Terms</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"+'</tr>'+"\n";
div_table += "\t"+'</thead>'+"\n";
div_table += "\t"+'<tbody>'+"\n";
......@@ -1689,10 +1693,20 @@ function MainTableAndCharts( data , initial , search_filter) {
volumeChart.filterAll();
dc.redrawAll();
// test if array is enough to restore proper page range
var ArrayAjaxRecords = [] ;
var i = 0 ;
var idmap = {}
for (ngid in AjaxRecords) {
ArrayAjaxRecords.push(AjaxRecords[ngid]) ;
i ++ ;
idmap[ngid] = i
}
MyTable = []
MyTable = $('#my-ajax-table').dynatable({
dataset: {
records: AjaxRecords
records: ArrayAjaxRecords
},
features: {
pushState: false,
......@@ -1701,6 +1715,10 @@ function MainTableAndCharts( data , initial , search_filter) {
writers: {
_rowWriter: ulWriter
// _cellWriter: customCellWriter
},
inputs: {
queries: $('select#testquery'),
queries: $('select#picklistmenu'),
}
})
......@@ -1713,8 +1731,6 @@ function MainTableAndCharts( data , initial , search_filter) {
MyTable.data('dynatable').process();
MyTable.data('dynatable').paginationPage.set(1);
MyTable.data('dynatable').paginationPerPage.set(20); // default:10
// MyTable.data('dynatable').process();
// MyTable.data('dynatable').sorts.clear();
MyTable.data('dynatable').process();
// hook on page change
......@@ -1726,86 +1742,44 @@ function MainTableAndCharts( data , initial , search_filter) {
// // // $("#score_column_id").children()[0].text = FirstScore
// // // // MyTable.data('dynatable').process();
// bind a filter named 'my_state_filter' to dynatable.queries.functions
MyTable.data('dynatable').queries
// selects on current state <=> shows only elements of specific list
// nb: possible value are in {0,1,2} (see terms.html > #picklistmenu)
.functions['my_state_filter'] = function(record,selectedValue) {
if (selectedValue == 'reset') {
return (AjaxRecords[record.id].state >= 0)
}
else {
// return true or false
return (AjaxRecords[record.id].state == selectedValue)
}
}
// moves pagination over table
if ( $(".imadiv").length>0 ) return 1;
$('<br><br><div class="imadiv"></div>').insertAfter(".dynatable-per-page")
$(".dynatable-record-count").insertAfter(".imadiv")
$(".dynatable-pagination-links").insertAfter(".imadiv")
// Search
// TODO : $("#filter_search").html( $("#filter_search").html().replace('selected="selected"') );
$("#"+search_filter).attr( "selected" , "selected" )
var the_content = $("#filter_search").html();
$(""+the_content).insertAfter("#dynatable-query-search-my-ajax-table")
return "OK"
}
function SearchFilters( elem ) {
var MODE = elem.value;
if( MODE == "filter_all") {
var result = MainTableAndCharts( NGrams["main"] , NGrams["main"].scores.initial , MODE)
console.log( result )
MyTable.data('dynatable').sorts.clear();
MyTable.data('dynatable').sorts.add('score', 0) // 1=ASCENDING,
MyTable.data('dynatable').process();
}
if( MODE == "filter_map-list") {
console.log("ngrams_map:")
console.log(NGrams["map"])
var sub_ngrams_data = {
"ngrams":[],
"scores": $.extend({}, NGrams["main"].scores)
}
for(var r in NGrams["main"].ngrams) {
if ( NGrams["map"][NGrams["main"].ngrams[r].id] ) {
var a_ngram = NGrams["main"].ngrams[r]
a_ngram["state"] = System[0]["statesD"]["keep"]
sub_ngrams_data["ngrams"].push( a_ngram )
}
}
var result = MainTableAndCharts(sub_ngrams_data , NGrams["main"].scores.initial , MODE)
console.log( result )
// MyTable.data('dynatable').sorts.clear();
// MyTable.data('dynatable').sorts.add('score', 0) // 1=ASCENDING,
// MyTable.data('dynatable').process();
}
if( MODE == "filter_stop-list") {
console.log( NGrams["stop"] )
if(Object.keys(NGrams["stop"]).length>0) {
var sub_ngrams_data = {
"ngrams":[],
"scores": $.extend({}, NGrams["main"].scores)
}
for(var r in NGrams["stop"]) {
var a_ngram = NGrams["stop"][r] ;
// deletestateId = 2
var deletestateId = System[0]["statesD"]["delete"] ;
a_ngram["state"] = deletestateId ;
sub_ngrams_data["ngrams"].push( a_ngram )
}
var result = MainTableAndCharts(sub_ngrams_data , NGrams["main"].scores.initial , MODE)
console.log( result )
}
}
}
// =============================================================================
// SUBROUTINES
// =============================================================================
// This function is connected to a "Test" button in the html
// place here anything you want to test
function doATest() {
console.log("v----------- TEST -----------v")
MyTable.data('dynatable').queries.add('group_exists',true);
MyTable.data('dynatable').process();
console.log("^---------- /TEST -----------^")
}
/**
* tidyAfterUpdate:
* -----------
......
......@@ -58,10 +58,25 @@
<p id="corpusdisplayer" onclick='Final_UpdateTable("click")' class="btn btn-primary btn-lg">
Close term list
</p>
<!-- <button title='run test function' onclick="doATest()">
TEST
</button> -->
</a>
<!-- see in javascript function queries.functions['my_state_filter'] -->
<div class="pull-left" style="margin-top:1.85em;">
Filter:
<select id="picklistmenu" name="my_state_filter">
<option value='reset' selected="selected" >All terms</option>
<option value='0'>Mainlist only</option>
<option value='1'>Maplist only</option>
<option value='2'>Stoplist only</option>
</select>
</div>
</h4>
</div>
<div id="terms_table" class="panel-collapse collapse in no-transition" role="tabpanel">
<div class="panel-body">
<div id="div-table">
......@@ -78,9 +93,9 @@
</div> <!-- /div panel -->
</div> <!-- /row with the dynatable panels -->
</div>
<!-- /jumbotron
</div>
<!-- /jumbotron
<button id="ImportList" onclick="GetUserPortfolio();" class="btn btn-warning">
Import a Corpus-List
</button>
......@@ -90,6 +105,11 @@
<!--
# stub to import a list (aka orange button)
<button id="ImportList" onclick="GetUserPortfolio();" class="btn btn-warning">Import a Corpus-List</button>
-->
<script type="text/javascript" src="{% static "js/jquery/jquery.min.js" %}"></script>
<script type="text/javascript" src="{% static "js/bootstrap/bootstrap.min.js" %}"></script>
......
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