diff --git a/browser/js/autocomplete.js b/browser/js/autocomplete.js index 2f604d400311bf42eaf174ce68d30da5d6b8ab6d..92cfca2453ad647b7870a813408ecaa1588f9eba 100644 --- a/browser/js/autocomplete.js +++ b/browser/js/autocomplete.js @@ -28,6 +28,7 @@ function VidjilAutoComplete(datasource) { } this.datasource = datasource; + this.dataUrls = {}; this.isLoadingData = {}; this.cachedData = {}; this.loadedGroups = []; @@ -64,24 +65,28 @@ VidjilAutoComplete.prototype = { this.cachedData = {}; }, - isLoaded : function(group_ids) { - // this.loadedGroups is sorted on assignment - if (this.loadedGroups.length !== group_ids.length) { + isLoaded : function(keys) { + // this.loadedData is sorted on assignment + if (this.loadedData.length !== keys.length) { return false; } - var sorted_groups = group_ids.sort(); - for (var i = 0; i < this.loadedGroups.length; i++) { - if (this.loadedGroups[i] !== sorted_groups[i]) { + var sorted_keys = keys.sort(); + for (var i = 0; i < this.loadedData.length; i++) { + if (this.loadedData[i] !== sorted_keys[i]) { return false; } } return true; }, - setupAtWho: function(input) { + setupTags: function(input) { + this.setupAtWho(input, this.atWhoTags); + }, + + setupAtWho: function(input, callback) { var $input = $(input); if ($input.data('needs-atwho')) { - $input.off('focus.setupAtWho').on('focus.setupAtWho', this.setupTags.bind(this, $input)); + $input.off('focus.setupAtWho').on('focus.setupAtWho', callback.bind(this, $input)); $input.on('change.atwho', function() { input.dispatchEvent(new Event('input'))}); // This triggers at.js again // Needed for quick actions with suffixes (ex: /label ~) @@ -94,10 +99,11 @@ VidjilAutoComplete.prototype = { } }, - setupTags : function($input) { + atWhoTags : function($input) { var self = this; var at = '#'; this.initCache(at); + this.dataUrls[at] = this.datasource.db_address + 'tag/auto_complete'; $input.atwho({ at: at, alias: 'tags', @@ -113,19 +119,19 @@ VidjilAutoComplete.prototype = { var isLoaded = this.isLoaded.bind(this); var callbacks = { filter : function(query, data, searchKey) { - var group_ids = this.$inputor.data('group-ids'); - if (VidjilAutoComplete.isLoading(data) || !isLoaded(group_ids)) { + var keys = this.$inputor.data('keys'); + if (VidjilAutoComplete.isLoading(data) || !isLoaded(keys)) { this.$inputor.atwho('load', this.at, VidjilAutoComplete.defaultLoadingData); - fetchData(this.$inputor, this.at, group_ids); + fetchData(this.$inputor, this.at, keys); return data; } return $.fn.atwho.default.callbacks.filter(query, data, searchKey); }, - beforeSave: function(tags) { - if (tags.length == 1 && tags[0] == VidjilAutoComplete.defaultLoadingData[0]) { - return tags; + beforeSave: function(data) { + if (data.length == 1 && data[0] == VidjilAutoComplete.defaultLoadingData[0]) { + return data; } - return $.map(tags, function(i) { + return $.map(data, function(i) { if (i.name === null) { return i; } @@ -150,17 +156,17 @@ VidjilAutoComplete.prototype = { return callbacks; }, - fetchData : function($input, at, group_ids) { + fetchData : function($input, at, keys) { var self = this; if (this.isLoadingData[at]) return; this.isLoadingData[at] = true; var uncached = []; - for (var i = 0; i < group_ids.length; i++) { - var group_id = group_ids[i]; - if (!this.cachedData[at][group_id]) { - uncached.push(group_id); - //this.loadData($input, at, this.cachedData[at][group_id], group_id); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!this.cachedData[at][key]) { + uncached.push(key); + //this.loadData($input, at, this.cachedData[at][key], key); } } @@ -168,39 +174,39 @@ VidjilAutoComplete.prototype = { $.ajax({ type: "GET", data: { - group_ids: JSON.stringify(uncached) + keys: JSON.stringify(uncached) }, timeout: 5000, crossDomain: true, - url: self.datasource, + url: self.dataUrls[at], success: function (data) { var my_data = JSON.parse(data); self.cacheData(at, my_data, uncached); - self.loadData($input, at, group_ids); + self.loadData($input, at, keys); }, error: function (request, status, error) { self.isLoadingData[at] = false; } }); } else { - this.loadData($input, at, group_ids); + this.loadData($input, at, keys); } }, - cacheData : function(at, data, group_ids) { - for (var i = 0; i < group_ids.length; i++) { - var group_id = group_ids[i]; - this.cachedData[at][group_id] = data[group_id] ? data[group_id] : []; + cacheData : function(at, data, keys) { + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + this.cachedData[at][key] = data[key] ? data[key] : []; } }, - loadData : function($input, at, group_ids) { + loadData : function($input, at, keys) { this.isLoadingData[at] = false; - this.loadedGroups = group_ids.sort(); + this.loadedData = keys.sort(); var loaded_data = []; - for (var i = 0; i < this.loadedGroups.length; i++) { - loaded_data = loaded_data.concat(this.cachedData[at][this.loadedGroups[i]]); + for (var i = 0; i < this.loadedData.length; i++) { + loaded_data = loaded_data.concat(this.cachedData[at][this.loadedData[i]]); } // remove duplicates diff --git a/browser/js/info.js b/browser/js/info.js index d52a7f57dd612be676baf347438f08aaec742ab4..714cb432a9435b3ce94176b198b76e1c914ea406 100644 --- a/browser/js/info.js +++ b/browser/js/info.js @@ -318,10 +318,10 @@ Info.prototype = { textarea.innerHTML = info ; textarea.setAttribute('placeholder', placeholder); - $(textarea).data('group-ids', [this.m.group_id]); + $(textarea).data('keys', [this.m.group_id]); $(textarea).data('needs-atwho', true); $(textarea).on('focus', function() { - new VidjilAutoComplete().setupAtWho(this); + new VidjilAutoComplete().setupTags(this); }) container.appendChild(textarea); diff --git a/browser/js/main.js b/browser/js/main.js index 40ca66744fe52c6f097ec09da6394e4e83e4c9b7..31d66e01950fcb004a643316bb079f892d95b558 100644 --- a/browser/js/main.js +++ b/browser/js/main.js @@ -91,7 +91,7 @@ try { //TODO initMenu(); - new VidjilAutoComplete(db.db_address + 'tag/auto_complete'); + new VidjilAutoComplete(db); } catch(err) { this.db.log_error(err) } diff --git a/server/web2py/applications/vidjil/controllers/tag.py b/server/web2py/applications/vidjil/controllers/tag.py index 9b670bc12b3e87a72de5aae7e4c86b9fcc456a62..739762ce66ca93cdcb8b2ddb65f7b1bf7947e790 100644 --- a/server/web2py/applications/vidjil/controllers/tag.py +++ b/server/web2py/applications/vidjil/controllers/tag.py @@ -7,11 +7,11 @@ if request.env.http_origin: response.headers['Access-Control-Max-Age'] = 86400 def auto_complete(): - if "group_ids" not in request.vars: + if "keys" not in request.vars: return error_message("missing group ids") prefix = get_tag_prefix() - group_ids = json.loads(request.vars["group_ids"]) + group_ids = json.loads(request.vars["keys"]) tags = get_tags(db, group_ids) return tags_to_json(tags) diff --git a/server/web2py/applications/vidjil/views/file/add.html b/server/web2py/applications/vidjil/views/file/add.html index d145efca6ced3134532750c3984336bf633a19b0..f338f4fc73f6630329b1f3d4dfdb2d2b767c15ee 100644 --- a/server/web2py/applications/vidjil/views/file/add.html +++ b/server/web2py/applications/vidjil/views/file/add.html @@ -93,7 +93,7 @@ {{ if 3 not in group_ids:}} {{group_ids.append(3)}} {{pass}} - + diff --git a/server/web2py/applications/vidjil/views/file/edit.html b/server/web2py/applications/vidjil/views/file/edit.html index 2e247670316337ba6a5fe680a5ad72bf34f537bc..55c4d0b5094c5166a2eb9d387fce8a489258a609 100644 --- a/server/web2py/applications/vidjil/views/file/edit.html +++ b/server/web2py/applications/vidjil/views/file/edit.html @@ -101,7 +101,7 @@ info = db.sequence_file[request.vars["id"]] {{ if 3 not in group_ids:}} {{group_ids.append(3)}} {{pass}} - + diff --git a/server/web2py/applications/vidjil/views/patient/add.html b/server/web2py/applications/vidjil/views/patient/add.html index eb6fba2ac5fa866a55facbd8920ebdfcb82cde2b..9ac77364e34edc43457a5669dea4a9c17e251012 100644 --- a/server/web2py/applications/vidjil/views/patient/add.html +++ b/server/web2py/applications/vidjil/views/patient/add.html @@ -32,7 +32,7 @@ - + diff --git a/server/web2py/applications/vidjil/views/patient/edit.html b/server/web2py/applications/vidjil/views/patient/edit.html index 42dec34c86fbf74dc5949b1c6bce3ccc87cecccf..86cb7ca15fabc0ecd65fd5cc0f9ca98da26bcad9 100644 --- a/server/web2py/applications/vidjil/views/patient/edit.html +++ b/server/web2py/applications/vidjil/views/patient/edit.html @@ -30,7 +30,7 @@ info = db.patient[request.vars["id"]] - + diff --git a/server/web2py/applications/vidjil/views/run/add.html b/server/web2py/applications/vidjil/views/run/add.html index a84850e73e3f366c1cd3dc506190caa49d541b48..038b629e263f6b332568d55766e77b712e03ec64 100644 --- a/server/web2py/applications/vidjil/views/run/add.html +++ b/server/web2py/applications/vidjil/views/run/add.html @@ -27,7 +27,7 @@ - + diff --git a/server/web2py/applications/vidjil/views/run/edit.html b/server/web2py/applications/vidjil/views/run/edit.html index b9781c70ff193c984e36291bcc5370e33345d818..5e1ce7a2a915d806b1c9ddbee71acc8a4965098a 100644 --- a/server/web2py/applications/vidjil/views/run/edit.html +++ b/server/web2py/applications/vidjil/views/run/edit.html @@ -25,7 +25,7 @@ info = db.run[request.vars["id"]] - + diff --git a/server/web2py/applications/vidjil/views/sample_set/add.html b/server/web2py/applications/vidjil/views/sample_set/add.html index 2b6273be50bad57c7cfe8184972b24fac136b43e..1016e2644bbf1a76527b759cab58294ad987897d 100644 --- a/server/web2py/applications/vidjil/views/sample_set/add.html +++ b/server/web2py/applications/vidjil/views/sample_set/add.html @@ -17,7 +17,7 @@ - + diff --git a/server/web2py/applications/vidjil/views/sample_set/all.html b/server/web2py/applications/vidjil/views/sample_set/all.html index 67689d20e401e3f912480ba8914806be5b39dcc6..f331d91d26a871755d6ed79b28ead2362ec54578 100644 --- a/server/web2py/applications/vidjil/views/sample_set/all.html +++ b/server/web2py/applications/vidjil/views/sample_set/all.html @@ -9,8 +9,8 @@
search + onfocus="new VidjilAutoComplete().setupTags(this);" + data-needs-atwho="true" data-keys="{{=group_ids}}">
diff --git a/server/web2py/applications/vidjil/views/sample_set/custom.html b/server/web2py/applications/vidjil/views/sample_set/custom.html index a9fb6dcc09a6be2a4169352473f4b741b0596fd4..f7b63de92ab38e962bc7555784e622f2fb16dcda 100644 --- a/server/web2py/applications/vidjil/views/sample_set/custom.html +++ b/server/web2py/applications/vidjil/views/sample_set/custom.html @@ -21,8 +21,8 @@ onchange="db.call('sample_set/custom', {'config_id' : '{{=request.vars["config_id"]}}', 'filter' : this.value, 'custom_list' : db.getListInput('custom_result[]')} )" - onfocus="new VidjilAutoComplete().setupAtWho(this);" - data-needs-atwho="true" data-group-ids="{{=group_ids}}"> + onfocus="new VidjilAutoComplete().setupTags(this);" + data-needs-atwho="true" data-keys="{{=group_ids}}"> diff --git a/server/web2py/applications/vidjil/views/sample_set/edit.html b/server/web2py/applications/vidjil/views/sample_set/edit.html index 0bddc1855141627d8cef6dbf3bcbe406660b9467..af14754e3f26aea7383e535a11e6dc252cac6a2d 100644 --- a/server/web2py/applications/vidjil/views/sample_set/edit.html +++ b/server/web2py/applications/vidjil/views/sample_set/edit.html @@ -15,7 +15,7 @@ info = db.generic[request.vars["id"]] - +