diff --git a/django_code/apps/betaserie/utils.py b/django_code/apps/betaserie/utils.py index 10e0be6..e4a6ad7 100644 --- a/django_code/apps/betaserie/utils.py +++ b/django_code/apps/betaserie/utils.py @@ -63,18 +63,19 @@ class betaserieUtils(): def identify_episode(self,show_id,episode_number,verbose=False): # # Usage - # episode_id = beta.identify_episode(show_id,"S01E01",True) + # episode_id,episode_seen = beta.identify_episode(show_id,"S01E01",True) # url = "https://api.betaseries.com/episodes/search?show_id="+str(show_id)+"&number="+str(episode_number) response = requests.request("GET", url, headers=self.headers, data=self.payload) episode_id = response.json()['episode']['id'] + episode_seen = response.json()['episode']['user']['seen'] if verbose: print("Url request: "+str(url)) print(response.text) - return episode_id + return episode_id,episode_seen def mark_episodes_watched(self,episode_id,verbose=False): # @@ -112,11 +113,21 @@ class betaserieUtils(): url = "https://api.betaseries.com/shows/display?id="+str(show_id) response = requests.request("GET", url, headers=self.headers, data=self.payload) - maximum_number_seasons = response.json()['show']['seasons'] - if verbose : print("maximum_number_seasons: "+str(maximum_number_seasons)) - seasons_details = response.json()['show']['seasons_details'] + + #checking if the first season is season 0, and if so remove this season + if (seasons_details[0]['number']==0): + season_0_to_remove = seasons_details[0] + + if verbose : print(season_0_to_remove) + + seasons_details.remove(season_0_to_remove) + maximum_number_seasons = len(seasons_details) + + if verbose : print("maximum_number_seasons: "+str(maximum_number_seasons)) + + if verbose: print("Url request: "+str(url)) print(response.text) diff --git a/django_code/apps/cloudmanager/apps.py b/django_code/apps/cloudmanager/apps.py index 1010f1c..3256025 100644 --- a/django_code/apps/cloudmanager/apps.py +++ b/django_code/apps/cloudmanager/apps.py @@ -3,7 +3,7 @@ from django.http import HttpResponse from django.http import HttpResponseRedirect from django.shortcuts import render import os -import psycopg2 +#import psycopg2 from apps.cloudmanager.db_interaction import DB_generation,Check_server_supposed_XXX,Give_current_weekday,Give_current_hour diff --git a/django_code/apps/cloudmanager/db_interaction.py b/django_code/apps/cloudmanager/db_interaction.py index 2d018e7..309f9b8 100644 --- a/django_code/apps/cloudmanager/db_interaction.py +++ b/django_code/apps/cloudmanager/db_interaction.py @@ -1,4 +1,4 @@ -import psycopg2 +#import psycopg2 from django.http import HttpResponse from django.views.decorators.http import require_POST from apps.kubernetes_connection import apps as kubernetes_connection diff --git a/django_code/apps/random_simpsons/utils.py b/django_code/apps/random_simpsons/utils.py index 51f0f77..c1788ad 100644 --- a/django_code/apps/random_simpsons/utils.py +++ b/django_code/apps/random_simpsons/utils.py @@ -22,7 +22,7 @@ def mark_episode_watched(season,episode,action,verbose=False): #mark episode as seen in betaserie episode_number = "S"+str(season)+"E"+str(episode) - episode_id = betaserie.identify_episode(simpsons_id,episode_number) + episode_id,episode_seen = betaserie.identify_episode(simpsons_id,episode_number) if action == "watched": betaserie.mark_episodes_watched(episode_id) @@ -49,20 +49,16 @@ def generate_new_urls_for_episode(verbose=False): # URL.com/simpsons/season=XX&episode=XX # example # https://www.1shows.org/tv/456-the-simpsons?streaming=true&season=33&episode=18 + + seasons_information,maximum_number_season = betaserie.series_information(simpsons_id) - simpsons_series_information = betaserie.series_information(simpsons_id) - seasons_information = simpsons_series_information[0] #for the simpsons, there is a season 0 which increase the count of seasons by 1 # we need to remove this entry , # so we cannot trust the maximum_number_season coming from simpsons_series_information - season_0_to_remove = seasons_information[0] - - if verbose : print(season_0_to_remove) - - seasons_information.remove(season_0_to_remove) - maximum_number_season = len(seasons_information) + # edit 26/08/2026 + # I updated the function betaserie.series_information to remove this season 0 for season in range(1,maximum_number_season+1): # the list doesn't start with season 0 anymore so we cannot use the season number as index diff --git a/django_code/apps/streaming/admin.py b/django_code/apps/streaming/admin.py index bb77350..1b3bd20 100644 --- a/django_code/apps/streaming/admin.py +++ b/django_code/apps/streaming/admin.py @@ -87,6 +87,6 @@ class StreamingRedirectAdmin(ImportExportModelAdmin): ( 'Information', { "classes": ["collapse"], - 'fields': ('seasonInformation','alias','betaserieShowId') + 'fields': ('seasonInformation','alias','betaserieShowId','maximumNumberSeason') }), ) \ No newline at end of file diff --git a/django_code/apps/streaming/migrations/0013_streamingredirectdata_maximumnumberseason.py b/django_code/apps/streaming/migrations/0013_streamingredirectdata_maximumnumberseason.py new file mode 100644 index 0000000..5cd407b --- /dev/null +++ b/django_code/apps/streaming/migrations/0013_streamingredirectdata_maximumnumberseason.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.30 on 2026-08-26 11:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('streaming', '0012_alter_streamingredirectdata_betaserieshowid'), + ] + + operations = [ + migrations.AddField( + model_name='streamingredirectdata', + name='maximumNumberSeason', + field=models.IntegerField(blank=True, null=True), + ), + ] diff --git a/django_code/apps/streaming/models.py b/django_code/apps/streaming/models.py index 3256e10..6bef159 100644 --- a/django_code/apps/streaming/models.py +++ b/django_code/apps/streaming/models.py @@ -28,6 +28,7 @@ class StreamingRedirectData(models.Model): alias = models.CharField(max_length=1000, null=True,blank=True) seasonInformation = models.JSONField(default=dict, blank=True) betaserieShowId = models.IntegerField(null=True,blank=True) + maximumNumberSeason = models.IntegerField(null=True,blank=True) randomViewing = models.BooleanField(default=False) def sanitize(self, name): @@ -38,7 +39,13 @@ class StreamingRedirectData(models.Model): print(serie_name) print(betaserie.identify_serie(serie_name)) return betaserie.series_information(betaserie.identify_serie(serie_name))[0] - + + def maximum_Number_Season(self, serie_name): + betaserie = betaserieUtils() + print(serie_name) + print(betaserie.identify_serie(serie_name)) + return betaserie.series_information(betaserie.identify_serie(serie_name))[1] + def betaserie_show_id(self,serie_name): betaserie = betaserieUtils() print(serie_name) @@ -46,6 +53,7 @@ class StreamingRedirectData(models.Model): return betaserie.identify_serie(serie_name) + def save(self, *args, **kwargs): if not self.seasonInformation : self.seasonInformation = self.season_information(self.name) @@ -53,6 +61,8 @@ class StreamingRedirectData(models.Model): self.alias = self.sanitize(self.name) if not self.betaserieShowId: self.betaserieShowId = self.betaserie_show_id(self.name) + if not self.maximumNumberSeason: + self.maximumNumberSeason = self.maximum_Number_Season(self.name) super().save(*args, **kwargs) class Meta: diff --git a/django_code/apps/streaming/utils.py b/django_code/apps/streaming/utils.py index 40f31c4..065284b 100644 --- a/django_code/apps/streaming/utils.py +++ b/django_code/apps/streaming/utils.py @@ -1,6 +1,7 @@ import requests from django.conf import settings - +from apps.betaserie.utils import betaserieUtils +import random def full_testing(url_website): status = "unknown" @@ -38,18 +39,26 @@ def test_website(url_website,bool_proxy=False): return status -def randomEpisode(): - return 0,0 +def randomEpisode(seasonInformation,maximum_number_of_seasons): + random_season = random.randint(1, maximum_number_of_seasons) + print("random season: " + str(random_season)) -def followingEpisode(season,episode,seasonInformation): + maximum_number_of_episodes = seasonInformation[random_season-1]['episodes'] + + random_episode = random.randint(1, maximum_number_of_episodes) + print("random episode: " + str(random_episode)) + + return random_season,random_episode + +def followingEpisode(season,episode,seasonInformation,maximum_number_seasons): lastEpisode = False #check if the episode is the last one of the season - if (episode < seasonInformation[season]['episodes']): - #the current episode is not the + if (episode < seasonInformation[season-1]['episodes']): + #the current episode is not the last one of the season episode += 1 #check if the season is the last one - elif((season+1) < (len(seasonInformation)-1)): + elif((season+1) < maximum_number_seasons): season += 1 episode = 1 else: diff --git a/django_code/apps/streaming/views.py b/django_code/apps/streaming/views.py index 1c56fdc..d5a0507 100644 --- a/django_code/apps/streaming/views.py +++ b/django_code/apps/streaming/views.py @@ -5,6 +5,7 @@ from .models import StreamingRedirectData from .utils import randomEpisode,followingEpisode from apps.betaserie.utils import betaserieUtils + betaserie = betaserieUtils() @@ -19,6 +20,8 @@ def streamingRedirect(request,alias): episode = streaming_object.values('episode')[0]['episode'] season = streaming_object.values('season')[0]['season'] seasonInformation = streaming_object.values('seasonInformation')[0]['seasonInformation'] + maximumNumberSeason = streaming_object.values('maximumNumberSeason')[0]['maximumNumberSeason'] + url_prefix = streaming_object.values('prefix')[0]['prefix'] url_infix = streaming_object.values('infix')[0]['infix'] @@ -26,29 +29,35 @@ def streamingRedirect(request,alias): betaserieShowId = streaming_object.values('betaserieShowId')[0]['betaserieShowId'] - print(url_prefix) - - print(season) - print(episode) + print("Last episode seen:") + print("Season: "+str(season)) + print("Episode: "+str(episode)) print(seasonInformation) + - value = str(streaming_object.values('url_example')) - print(value) + randomViewing = streaming_object.values('randomViewing')[0]['randomViewing'] + print("randomViewing: "+str(randomViewing)) - url_example = str(streaming_object.values('url_example')[0]['url_example']) - print(url_example) - - randomViewing =str(streaming_object.values('randomViewing')[0]['randomViewing']) - print(randomViewing) - - if (randomViewing == False): + if (randomViewing == True): print('show set to random') - season,episode = randomEpisode() + boolean_restart = True; + while (boolean_restart): + season,episode = randomEpisode(seasonInformation,maximumNumberSeason) + episode_number = "S"+str(season)+"E"+str(episode) + + episode_id,episode_seen = betaserie.identify_episode(betaserieShowId,episode_number) + print("episode_seen: "+str(episode_seen)) + + if not(episode_seen): + boolean_restart = False + else: + print("episode "+str(episode)+" from season "+str(season)+" already seen") + else: print('show set to following episode') - season,episode,lastEpisode = followingEpisode(season,episode,seasonInformation) + season,episode,lastEpisode = followingEpisode(season,episode,seasonInformation,maximumNumberSeason) if (lastEpisode): return HttpResponse('

You already watched the last episode of the serie!

') @@ -68,9 +77,8 @@ def streamingRedirect(request,alias): #mark episode as seen in betaserie episode_number = "S"+str(season)+"E"+str(episode) - episode_id = betaserie.identify_episode(betaserieShowId,episode_number) + episode_id,episode_seen = betaserie.identify_episode(betaserieShowId,episode_number) betaserie.mark_episodes_watched(episode_id) - return redirect(str(url_generated)) \ No newline at end of file diff --git a/django_code/templates/static/djangoql/css/completion.css b/django_code/templates/static/djangoql/css/completion.css new file mode 100644 index 0000000..58fc1c7 --- /dev/null +++ b/django_code/templates/static/djangoql/css/completion.css @@ -0,0 +1,85 @@ +.djangoql-completion { + position: absolute; + display: none; + border: solid 1px #ccc; + border-radius: 4px; + background: white; + background: var(--body-bg, white); + min-width: 183px; + font-size: 13px; +} + +.djangoql-completion .active { + background-color: #79aec8; + color: white; +} + +.djangoql-completion ul { + padding: 2px 0; + margin: 0; + max-height: 295px; + overflow: auto; +} + +.djangoql-completion li { + list-style: none; + padding: 4px 10px; + cursor: pointer; +} + +.djangoql-completion li:hover { + background-color: #c4e9fa; + color: black; +} + +.djangoql-completion li i { + font-size: 0.9em; + color: #ccc; + float: right; + font-style: normal; +} + +.djangoql-completion .syntax-help { + padding: 4px 10px 6px 10px; + margin: 0; + border-top: solid 1px #ccc; + font-size: inherit; +} + +/* +Pure CSS loading icon. Credit: https://loading.io/css/ +*/ +.djangoql-loading { + display: block; + position: relative; +} + +.djangoql-loading:after { + -moz-animation: djangoql-loading 1.2s linear infinite; + -ms-animation: djangoql-loading 1.2s linear infinite; + -webkit-animation: djangoql-loading 1.2s linear infinite; + animation: djangoql-loading 1.2s linear infinite; + border: 2px solid #aaa; + border-color: #aaa transparent #aaa transparent; + border-radius: 50%; + content: " "; + display: block; + height: 12px; + left: 50%; + margin: -8px; + position: absolute; + top: 50%; + width: 12px; +} + +@keyframes djangoql-loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + + +/*# sourceMappingURL=completion.css.map*/ \ No newline at end of file diff --git a/django_code/templates/static/djangoql/css/completion.css.map b/django_code/templates/static/djangoql/css/completion.css.map new file mode 100644 index 0000000..194c015 --- /dev/null +++ b/django_code/templates/static/djangoql/css/completion.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./node_modules/djangoql-completion/dist/completion.css"],"names":[],"mappings":"AAAA;EACE,kBAAkB;EAClB,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,iBAAiB;EACjB,iCAAiC;EACjC,gBAAgB;EAChB,eAAe;AACjB;;AAEA;EACE,yBAAyB;EACzB,YAAY;AACd;;AAEA;EACE,cAAc;EACd,SAAS;EACT,iBAAiB;EACjB,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;AACjB;;AAEA;EACE,yBAAyB;EACzB,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,YAAY;EACZ,kBAAkB;AACpB;;AAEA;EACE,0BAA0B;EAC1B,SAAS;EACT,0BAA0B;EAC1B,kBAAkB;AACpB;;AAEA;;CAEC;AACD;EACE,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,qDAAqD;EACrD,oDAAoD;EACpD,wDAAwD;EACxD,gDAAgD;EAChD,sBAAsB;EACtB,+CAA+C;EAC/C,kBAAkB;EAClB,YAAY;EACZ,cAAc;EACd,YAAY;EACZ,SAAS;EACT,YAAY;EACZ,kBAAkB;EAClB,QAAQ;EACR,WAAW;AACb;;AAEA;EACE;IACE,uBAAuB;EACzB;EACA;IACE,yBAAyB;EAC3B;AACF","file":"css/completion.css","sourcesContent":[".djangoql-completion {\n position: absolute;\n display: none;\n border: solid 1px #ccc;\n border-radius: 4px;\n background: white;\n background: var(--body-bg, white);\n min-width: 183px;\n font-size: 13px;\n}\n\n.djangoql-completion .active {\n background-color: #79aec8;\n color: white;\n}\n\n.djangoql-completion ul {\n padding: 2px 0;\n margin: 0;\n max-height: 295px;\n overflow: auto;\n}\n\n.djangoql-completion li {\n list-style: none;\n padding: 4px 10px;\n cursor: pointer;\n}\n\n.djangoql-completion li:hover {\n background-color: #c4e9fa;\n color: black;\n}\n\n.djangoql-completion li i {\n font-size: 0.9em;\n color: #ccc;\n float: right;\n font-style: normal;\n}\n\n.djangoql-completion .syntax-help {\n padding: 4px 10px 6px 10px;\n margin: 0;\n border-top: solid 1px #ccc;\n font-size: inherit;\n}\n\n/*\nPure CSS loading icon. Credit: https://loading.io/css/\n*/\n.djangoql-loading {\n display: block;\n position: relative;\n}\n\n.djangoql-loading:after {\n -moz-animation: djangoql-loading 1.2s linear infinite;\n -ms-animation: djangoql-loading 1.2s linear infinite;\n -webkit-animation: djangoql-loading 1.2s linear infinite;\n animation: djangoql-loading 1.2s linear infinite;\n border: 2px solid #aaa;\n border-color: #aaa transparent #aaa transparent;\n border-radius: 50%;\n content: \" \";\n display: block;\n height: 12px;\n left: 50%;\n margin: -8px;\n position: absolute;\n top: 50%;\n width: 12px;\n}\n\n@keyframes djangoql-loading {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/django_code/templates/static/djangoql/css/completion_admin.css b/django_code/templates/static/djangoql/css/completion_admin.css new file mode 100644 index 0000000..053349f --- /dev/null +++ b/django_code/templates/static/djangoql/css/completion_admin.css @@ -0,0 +1,31 @@ +#changelist #toolbar form textarea#searchbar { + width: 80%; +} + +.djangoql-toggle { + margin-right: 10px; +} + +.djangoql-help { + display: inline-block; + float: right; + margin-right: 30px; +} + +@media (max-width: 1024px) { + .djangoql-help { + margin-right: 20px; + } +} + +@media (max-width: 767px) { + .djangoql-help { + margin-right: 5px; + } +} + +.clearfix::after { + content: ""; + clear: both; + display: table; +} diff --git a/django_code/templates/static/djangoql/css/syntax_help.css b/django_code/templates/static/djangoql/css/syntax_help.css new file mode 100644 index 0000000..43ad5e7 --- /dev/null +++ b/django_code/templates/static/djangoql/css/syntax_help.css @@ -0,0 +1,14 @@ +code { + background-color: rgba(27, 31, 35, 0.05); + padding: 0.2em; +} + +pre { + background-color: rgba(27, 31, 35, 0.05); + padding: 5px 40px; + margin: 0 0 10px 0; +} + +table { + margin: 10px 0; +} diff --git a/django_code/templates/static/djangoql/img/completion_example.png b/django_code/templates/static/djangoql/img/completion_example.png new file mode 100644 index 0000000..b364229 Binary files /dev/null and b/django_code/templates/static/djangoql/img/completion_example.png differ diff --git a/django_code/templates/static/djangoql/img/completion_example_scaled.png b/django_code/templates/static/djangoql/img/completion_example_scaled.png new file mode 100644 index 0000000..1c0dc8f Binary files /dev/null and b/django_code/templates/static/djangoql/img/completion_example_scaled.png differ diff --git a/django_code/templates/static/djangoql/js/completion.js b/django_code/templates/static/djangoql/js/completion.js new file mode 100644 index 0000000..a3e2bba --- /dev/null +++ b/django_code/templates/static/djangoql/js/completion.js @@ -0,0 +1,2 @@ +!function(){var t={57:function(t,e,n){function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t){"function"!=typeof t&&(t=o.defunct);var e=[],n=[],i=0;function s(){for(var t=[],e=0,i=this.state,o=this.index,s=this.input,r=0,l=n.length;r=0||i%2&&1===u&&!c[0]){var h=a.pattern;h.lastIndex=o;var p=h.exec(s);if(p&&p.index===o){var d=t.push({result:p,action:a.action,length:p[0].length});for(a.global&&(e=d);--d>e;){var f=d-1;if(t[d].length>t[f].length){var m=t[d];t[d]=t[f],t[f]=m}}}}}return t}this.state=0,this.index=0,this.input="",this.addRule=function(t,e,i){var o=t.global;if(!o){var s="g";t.multiline&&(s+="m"),t.ignoreCase&&(s+="i"),t=new RegExp(t.source,s)}return"[object Array]"!==Object.prototype.toString.call(i)&&(i=[0]),n.push({pattern:t,global:o,action:e,start:i}),this},this.setInput=function(t){return i=0,this.state=0,this.index=0,e.length=0,this.input=t,this},this.lex=function(){if(e.length)return e.shift();for(this.reject=!0;this.index<=this.input.length;){for(var n=s.call(this).splice(i),o=this.index;n.length&&this.reject;){var r=n.shift(),l=r.result,a=r.length;this.index+=a,this.reject=!1,i++;var c=r.action.apply(this,l);if(this.reject)this.index=l.index;else if(void 0!==c)switch(Object.prototype.toString.call(c)){case"[object Array]":e=c.slice(1),c=c[0];default:return a&&(i=0),c}}var u=this.input;if(o=e||n<0||g&&t-f>=u}function w(){var t=o();if(x(t))return S(t);p=setTimeout(w,function(t){var n=e-(t-d);return g?l(n,u-(t-f)):n}(t))}function S(t){return p=void 0,y&&a?v(t):(a=c=void 0,h)}function E(){var t=o(),n=x(t);if(a=arguments,c=this,d=t,n){if(void 0===p)return b(d);if(g)return clearTimeout(p),p=setTimeout(w,e),v(d)}return void 0===p&&(p=setTimeout(w,e)),h}return e=s(e)||0,i(n)&&(m=!!n.leading,u=(g="maxWait"in n)?r(s(n.maxWait)||0,e):u,y="trailing"in n?!!n.trailing:y),E.cancel=function(){void 0!==p&&clearTimeout(p),f=0,a=d=c=p=void 0},E.flush=function(){return void 0===p?h:S(o())},E}},716:function(t){function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}t.exports=function(t){var n=e(t);return null!=t&&("object"==n||"function"==n)}},667:function(t){function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}t.exports=function(t){return null!=t&&"object"==e(t)}},570:function(t,e,n){function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var o=n(807),s=n(667);t.exports=function(t){return"symbol"==i(t)||s(t)&&"[object Symbol]"==o(t)}},244:function(t,e,n){var i=n(366);t.exports=function(){return i.Date.now()}},167:function(t,e,n){var i=n(645),o=n(716);t.exports=function(t,e,n){var s=!0,r=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return o(n)&&(s="leading"in n?!!n.leading:s,r="trailing"in n?!!n.trailing:r),i(t,e,{leading:s,maxWait:e,trailing:r})}},666:function(t,e,n){var i=n(182),o=n(716),s=n(570),r=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,a=/^0o[0-7]+$/i,c=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(s(t))return NaN;if(o(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=o(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=i(t);var n=l.test(t);return n||a.test(t)?c(t.slice(2),n?2:8):r.test(t)?NaN:+t}}},e={};function n(i){var o=e[i];if(void 0!==o)return o.exports;var s=e[i]={id:i,loaded:!1,exports:{}};return t[i](s,s.exports,n),s.loaded=!0,s.exports}n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,{a:e}),e},n.d=function(t,e){for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},function(){"use strict";var t=n(57),e=n.n(t),i=n(645),o=n.n(i),s=n(716),r=n.n(s),l=n(167),a=n.n(l);function c(t){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function u(t){this.size=0,this.limit=t,this.oldest=this.newest=void 0,this._keymap={}}u.prototype._markEntryAsUsed=function(t){t!==this.newest&&(t.newer&&(t===this.oldest&&(this.oldest=t.newer),t.newer.older=t.older),t.older&&(t.older.newer=t.newer),t.newer=void 0,t.older=this.newest,this.newest&&(this.newest.newer=t),this.newest=t)},u.prototype.put=function(t,e){var n=this._keymap[t];return n?(n.value=e,void this._markEntryAsUsed(n)):(this._keymap[t]=n={key:t,value:e,older:void 0,newer:void 0},this.newest?(this.newest.newer=n,n.older=this.newest):this.oldest=n,this.newest=n,this.size++,this.size>this.limit?this.shift():void 0)},u.prototype.shift=function(){var t=this.oldest;return t&&(this.oldest.newer?(this.oldest=this.oldest.newer,this.oldest.older=void 0):(this.oldest=void 0,this.newest=void 0),t.newer=t.older=void 0,delete this._keymap[t.key],this.size--),t},u.prototype.get=function(t,e){var n=this._keymap[t];if(void 0!==n)return this._markEntryAsUsed(n),e?n:n.value},u.prototype.find=function(t){return this._keymap[t]},u.prototype.set=function(t,e){var n,i=this.get(t,!0);return i?(n=i.value,i.value=e):(n=this.put(t,e))&&(n=n.value),n},u.prototype.remove=function(t){var e=this._keymap[t];if(e)return delete this._keymap[e.key],e.newer&&e.older?(e.older.newer=e.newer,e.newer.older=e.older):e.newer?(e.newer.older=void 0,this.oldest=e.newer):e.older?(e.older.newer=void 0,this.newest=e.older):this.oldest=this.newest=void 0,this.size--,e.value},u.prototype.removeAll=function(){this.oldest=this.newest=void 0,this.size=0,this._keymap={}},"function"==typeof Object.keys?u.prototype.keys=function(){return Object.keys(this._keymap)}:u.prototype.keys=function(){var t=[];for(var e in this._keymap)t.push(e);return t},u.prototype.forEach=function(t,e,n){var i;if(!0===e?(n=!0,e=void 0):"object"!==c(e)&&(e=this),n)for(i=this.newest;i;)t.call(e,i.key,i.value,this),i=i.older;else for(i=this.oldest;i;)t.call(e,i.key,i.value,this),i=i.newer},u.prototype.toJSON=function(){for(var t=new Array(this.size),e=0,n=this.oldest;n;)t[e++]={key:n.key,value:n.value},n=n.newer;return t},u.prototype.toString=function(){for(var t="",e=this.oldest;e;)t+=String(e.key)+":"+e.value,(e=e.newer)&&(t+=" < ");return t};var h=u;function p(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function d(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,i=new Array(e);n".concat(i,"")),{text:t,snippetBefore:e||"",snippetAfter:n||"",suggestionText:o}}T.addRule(k,(function(){})),T.addRule(/\./,(function(t){return N("DOT",t)})),T.addRule(/,/,(function(t){return N("COMMA",t)})),T.addRule(new RegExp("or".concat(L)),(function(t){return N("OR",t)})),T.addRule(new RegExp("and".concat(L)),(function(t){return N("AND",t)})),T.addRule(new RegExp("not".concat(L)),(function(t){return N("NOT",t)})),T.addRule(new RegExp("in".concat(L)),(function(t){return N("IN",t)})),T.addRule(new RegExp("startswith".concat(L)),(function(t){return N("STARTSWITH",t)})),T.addRule(new RegExp("endswith".concat(L)),(function(t){return N("ENDSWITH",t)})),T.addRule(new RegExp("True".concat(L)),(function(t){return N("TRUE",t)})),T.addRule(new RegExp("False".concat(L)),(function(t){return N("FALSE",t)})),T.addRule(new RegExp("None".concat(L)),(function(t){return N("NONE",t)})),T.addRule(/[_A-Za-z][_0-9A-Za-z]*(\.[_A-Za-z][_0-9A-Za-z]*)*/,(function(t){return N("NAME",t)})),T.addRule(j,(function(t){return N("STRING_VALUE",t.slice(1,t.length-1))})),T.addRule(b,(function(t){return N("INT_VALUE",t)})),T.addRule(x,(function(t){return N("FLOAT_VALUE",t)})),T.addRule(/\(/,(function(t){return N("PAREN_L",t)})),T.addRule(/\)/,(function(t){return N("PAREN_R",t)})),T.addRule(/=/,(function(t){return N("EQUALS",t)})),T.addRule(/!=/,(function(t){return N("NOT_EQUALS",t)})),T.addRule(/>/,(function(t){return N("GREATER",t)})),T.addRule(/>=/,(function(t){return N("GREATER_EQUAL",t)})),T.addRule(/ element, "+"but ".concat(this.textarea.tagName," was found")):this.logError("Element not found by selector: ".concat(t.selector))):this.logError("Please pass an object with initialization parameters")};_.init=function(t){return new _(t)},_.DOMReady=function(t){"loading"!==document.readyState?t():document.addEventListener("DOMContentLoaded",t)},_.prototype={createCompletionElement:function(){var t,e=this.options;this.completion||(this.completion=document.createElement("div"),this.completion.className="djangoql-completion",document.querySelector("body").appendChild(this.completion),this.completionUL=document.createElement("ul"),this.completionUL.onscroll=a()(this.onCompletionScroll.bind(this),50),this.completion.appendChild(this.completionUL),"string"==typeof e.syntaxHelp&&((t=document.createElement("p")).className="syntax-help",t.innerHTML='Syntax Help',t.addEventListener("mousedown",(function(t){t.preventDefault()})),this.completion.appendChild(t)),this.completionEnabled=!e.hasOwnProperty("completionEnabled")||e.completionEnabled)},destroyCompletionElement:function(){this.completion&&(this.completion.parentNode.removeChild(this.completion),this.completion=null,this.completionEnabled=!1)},enableCompletion:function(){this.completionEnabled=!0},disableCompletion:function(){this.completionEnabled=!1,this.hideCompletion()},getJson:function(t,e){this.loading=!0;var n=function(){this.loading=!1,this.request=null,this.logError("failed to fetch from ".concat(t))}.bind(this);this.request&&this.request.abort(),this.request=new XMLHttpRequest,this.request.open("GET",t,!0),this.request.onload=function(){this.loading=!1,200===this.request.status?"function"==typeof e.success&&e.success(JSON.parse(this.request.responseText)):n(),this.request=null}.bind(this),this.request.ontimeout=n,this.request.onerror=n,this.request.onprogress=function(){},window.setTimeout(this.request.send.bind(this.request))},loadIntrospections:function(t){var e=function(t){this.currentModel=t.current_model,this.models=t.models,this.suggestionsAPIUrl=t.suggestions_api_url}.bind(this);"string"==typeof t?this.getJson(t,{success:e}):r()(t)?e(t):this.logError("introspections parameter is expected to be either URL or "+"object with definitions, but ".concat(t," was found"))},logError:function(t){console.error("DjangoQL: ".concat(t))},onCompletionMouseClick:function(t){this.selectCompletion(parseInt(t.currentTarget.getAttribute("data-index"),10))},onCompletionMouseDown:function(t){t.preventDefault()},onKeydown:function(t){switch(t.keyCode){case 38:this.suggestions.length&&(null===this.selected?this.selected=this.suggestions.length-1:0===this.selected?this.selected=null:this.selected-=1,this.renderCompletion(),t.preventDefault());break;case 40:this.suggestions.length&&(null===this.selected?this.selected=0:this.selected1&&(p=d.join(""),!h&&!u.text)){var f=(c=2,function(t){if(Array.isArray(t))return t}(a=d)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var i,o,s=[],r=!0,l=!1;try{for(n=n.call(t);!(r=(i=n.next()).done)&&(s.push(i.value),!e||s.length!==e);r=!0);}catch(t){l=!0,o=t}finally{try{r||null==n.return||n.return()}finally{if(l)throw o}}return s}}(a,c)||function(t,e){if(t){if("string"==typeof t)return m(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?m(t,e):void 0}}(a,c)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());h=f[0],p=f[1]}r.endsWith(h)&&(h=""),l.startsWith(p)&&(p="");var g=h+u.text+p,y=r.length+g.length;d.length>1&&(y-=d[1].length),this.textarea.value=r+g+l,this.textarea.focus(),this.textarea.setSelectionRange(y,y),this.selected=null,this.textareaResize&&this.textareaResize(),this.generateSuggestions(this.textarea),this.renderCompletion()},hideCompletion:function(){this.selected=null,this.completion&&(this.completion.style.display="none")},highlight:function(t,e){return e&&t?this.highlightCaseSensitive?t.split(e).join("".concat(e,"")):t.replace(new RegExp("(".concat(e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),")"),"ig"),"$1"):t},renderCompletion:function(t){var e,n,i,o,s,r;if(this.completionEnabled){if(!t||"none"!==this.completion.style.display)if(this.suggestions.length||this.loading){var l=this.suggestions.length,a=[].slice.call(this.completionUL.querySelectorAll("li[data-index]"));for(s=a.length,n=0;ni.bottom?this.completionUL.scrollTop=this.completionUL.scrollTop+2+(o.bottom-i.bottom):o.topl;)a[--s].removeEventListener("click",this.onCompletionMouseClick),a[s].removeEventListener("mousedown",this.onCompletionMouseDown),this.completionUL.removeChild(a[s]);r=this.completionUL.querySelector("li.djangoql-loading"),this.loading?r||((r=document.createElement("li")).className="djangoql-loading",r.innerHTML=" ",this.completionUL.appendChild(r)):r&&this.completionUL.removeChild(r);var c=this.textarea.getBoundingClientRect(),u=window.pageYOffset+c.top+c.height;this.completion.style.top="".concat(u,"px"),this.completion.style.left="".concat(c.left,"px"),this.completion.style.display="block"}else this.hideCompletion()}else this.hideCompletion()},resolveName:function(t){var e,n,i,o=t.split("."),s=this.currentModel,r=null,l=[];if(s)for(l.push(s),n=0,i=o.length;n=e&&(d=p[h.length-1],h.pop()),h.length&&(c=h[h.length-1],h.length>1&&(u=h[h.length-2]));var f=(n=t.slice(c?c.end:0,e)).match(k);f&&(n=n.slice(f[0].length)),"("===n&&(n="");var m=["AND","OR"];if(")"!==n||f)if(!c||m.indexOf(c.name)>=0&&f||"."===n&&c&&!f||"PAREN_L"===c.name&&(!u||m.indexOf(u.name)>=0))s="field",r=this.currentModel,"."===n&&(n=t.slice(c.start,e)),(i=n.split(".")).length>1&&(n=i.pop(),(o=this.resolveName(i.join("."))).model&&!o.field?(r=o.model,a=o.modelStack):(s=null,r=null));else if(c&&f&&u&&"NAME"===u.name&&["EQUALS","NOT_EQUALS","CONTAINS","NOT_CONTAINS","GREATER_EQUAL","GREATER","LESS_EQUAL","LESS"].indexOf(c.name)>=0){if((o=this.resolveName(u.value)).model){s="value",r=o.model,l=o.field,a=o.modelStack;var g=this.models[r][l];'"'!==n[0]&&"'"!==n[0]||"str"!==g.type&&!g.options||(n=n.slice(1))}}else c&&f&&"NAME"===c.name?(o=this.resolveName(c.value)).model&&(s="comparison",r=o.model,l=o.field,a=o.modelStack):c&&f&&["PAREN_R","INT_VALUE","FLOAT_VALUE","STRING_VALUE"].indexOf(c.name)>=0&&(s="logical");return{prefix:n,scope:s,model:r,field:l,currentFullToken:d,modelStack:a}},getCurrentFieldOptions:function(){var t=this.textarea,e=this.getContext(t.value,t.selectionStart),n=this.models[e.model],i=e.field&&n[e.field],o={cacheKey:null,context:e,field:i,model:n,options:null};if("value"!==e.scope||!i||!i.options)return null;if(Array.isArray(i.options))o.options=i.options;else if(!0===i.options){if(!this.suggestionsAPIUrl)return null;o.cacheKey="".concat(e.model,".").concat(e.field,"|").concat(e.prefix)}return o},loadFieldOptions:function(t){var e=this.getCurrentFieldOptions()||{},n=e.context;if(e.cacheKey){var i={field:"".concat(n.model,".").concat(n.field),search:n.prefix},o=this.suggestionsCache.get(e.cacheKey)||{};if(t&&o.has_next)i.page=o.page?o.page+1:1;else if(o.page)return;o.loading=!0,this.suggestionsCache.set(e.cacheKey,o);var s,r,l,a,c,u,h,p,f,m,g=(s=this.suggestionsAPIUrl,r=i,p=(h=s.split("?"))[0],f=h.slice(1).join("?"),m=f.split("&"),Object.keys(r).forEach((function(t){for(a=encodeURI(t),c=encodeURI(r[a]),u=m.length;u--;)if((l=m[u].split("="))[0]===a){l[1]=c,m[u]=l.join("=");break}u<0&&m.push("".concat(a,"=").concat(c))})),(f=m.join("&"))?[p,f].join("?"):p);this.getJson(g,{success:function(t){var n=this.suggestionsCache.get(e.cacheKey)||{};if(t.page-1===(n.page||0)){var i=d(d({},t),{},{items:(n.items||[]).concat(t.items)});this.suggestionsCache.set(e.cacheKey,i),this.loading=!1,this.populateFieldOptions(),this.renderCompletion()}}.bind(this)}),this.populateFieldOptions(),this.renderCompletion()}},populateFieldOptions:function(t){var e=this.getCurrentFieldOptions();if(null!==e){var n,i=e.options,o=e.context&&e.context.prefix;if(i)i=this.valuesCaseSensitive?i.filter((function(t){return t.indexOf(o)>=0})):i.filter((function(t){return t.toLowerCase().indexOf(o.toLowerCase())>=0}));else{if(this.suggestions=[],!e.cacheKey)return;if(i=(n=this.suggestionsCache.get(e.cacheKey)||{}).items||[],!n.loading&&(!n.page||t&&n.has_next)&&this.debouncedLoadFieldOptions(t),!i.length)return}this.highlightCaseSensitive=this.valuesCaseSensitive,this.suggestions=i.map((function(t){return U(t,'"','"')}))}},onCompletionScroll:function(){var t=this.completionUL.getBoundingClientRect().height,e=this.completionUL.scrollTop+t;e>t&&e>this.completionUL.scrollHeight-t&&this.populateFieldOptions(!0)},generateSuggestions:function(){var t,e,n,i=this.textarea;if(!this.completionEnabled)return this.prefix="",void(this.suggestions=[]);if(this.currentModel){if(i.selectionStart!==i.selectionEnd)return this.prefix="",void(this.suggestions=[]);n=function(t){return t.text.indexOf(this.prefix)>=0}.bind(this),this.highlightCaseSensitive=!0;var o=this.getContext(i.value,i.selectionStart),s=o.modelStack;this.prefix=o.prefix;var r=this.models[o.model],l=o.field&&r[o.field];switch(o.scope){case"field":this.suggestions=Object.keys(r).filter((function(t){var e=r[t].relation;return"relation"!==r[t].type||!s.includes(e)||s.slice(-1)[0]===e})).map((function(t){return U(t,"","relation"===r[t].type?".":" ")}));break;case"comparison":t=["=",["!=","is not equal to"]],e=" ",l&&"bool"!==l.type&&(["date","datetime"].indexOf(l.type)>=0?(t.push(["~","contains"],["!~","does not contain"]),e=' "|"'):"str"===l.type?(t.push(["~","contains"],["!~","does not contain"],"startswith","not startswith","endswith","not endswith"),e=' "|"'):l.options&&(e=' "|"'),"str"!==l.type&&t.push(">",">=","<","<=")),this.suggestions=t.map((function(t){return"string"==typeof t?U(t,"",e):U(t[0],"",e,t[1])})),l&&"bool"!==l.type&&(e=["str","date","datetime"].indexOf(l.type)>=0||l.options?' ("|")':" (|)",this.suggestions.push(U("in","",e)),this.suggestions.push(U("not in","",e))),n=function(t){return 0===t.text.lastIndexOf(this.prefix,0)}.bind(this);break;case"value":l?l.options?(this.prefix=o.prefix,this.populateFieldOptions()):"bool"===l.type?(this.suggestions=[U("True",""," "),U("False",""," ")],l.nullable&&this.suggestions.push(U("None",""," "))):"unknown"===l.type&&(this.prefix="",this.suggestions=[]):this.suggestions=[U("None",""," ")];break;case"logical":this.suggestions=[U("and",""," "),U("or",""," ")];break;default:this.prefix="",this.suggestions=[]}this.suggestions=this.suggestions.filter(n),1===this.suggestions.length?this.selected=0:this.selected=null}}};var M=_;window.DjangoQL=M}()}(); +//# sourceMappingURL=completion.js.map \ No newline at end of file diff --git a/django_code/templates/static/djangoql/js/completion.js.map b/django_code/templates/static/djangoql/js/completion.js.map new file mode 100644 index 0000000..2356f9d --- /dev/null +++ b/django_code/templates/static/djangoql/js/completion.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./node_modules/lex/lexer.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_baseTrim.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_trimmedEndIndex.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/lodash/throttle.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/node module decorator","webpack:///./node_modules/djangoql-completion/src/lru-cache.js","webpack:///./node_modules/djangoql-completion/src/index.js","webpack:///./node_modules/djangoql-completion/src/utils.js","webpack:///./completion-widget/index.js"],"names":["Lexer","defunct","tokens","rules","remove","scan","matches","index","state","this","lastIndex","input","i","length","rule","start","states","indexOf","pattern","result","exec","j","push","action","global","k","temple","addRule","flags","multiline","ignoreCase","RegExp","source","Object","prototype","toString","call","setInput","lex","shift","reject","splice","match","token","apply","slice","charAt","module","exports","chr","Error","Symbol","require","getRawTag","objectToString","symToStringTag","toStringTag","undefined","value","trimmedEndIndex","reTrimStart","string","replace","freeGlobal","objectProto","hasOwnProperty","nativeObjectToString","isOwn","tag","unmasked","e","freeSelf","self","root","Function","reWhitespace","test","isObject","now","toNumber","nativeMax","Math","max","nativeMin","min","func","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","type","baseGetTag","isObjectLike","Date","debounce","baseTrim","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","other","valueOf","isBinary","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","id","loaded","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","defineProperty","enumerable","get","g","globalThis","window","obj","prop","nmd","paths","children","LRUCache","limit","size","oldest","newest","_keymap","_markEntryAsUsed","entry","newer","older","put","returnEntry","find","set","oldvalue","removeAll","keys","forEach","fun","context","desc","toJSON","s","Array","String","reIntValue","reFractionPart","reExponentPart","intRegex","floatRegex","reLineTerminators","reEscapedChar","reEscapedUnicode","reDoubleQuotedStringChar","reDoubleQuotedString","reSingleQuotedStringChar","reSingleQuotedString","stringRegex","reNotFollowedByName","whitespaceRegex","lexer","name","suggestion","text","snippetBefore","snippetAfter","explanation","suggestionText","l","lexAll","end","DjangoQL","cacheSize","currentModel","models","suggestionsAPIUrl","prefix","suggestions","selected","valuesCaseSensitive","highlightCaseSensitive","textarea","completion","completionUL","completionEnabled","loadIntrospections","introspections","selector","document","querySelector","tagName","logError","suggestionsCache","debouncedLoadFieldOptions","loadFieldOptions","bind","loading","enableCompletion","disableCompletion","onCompletionMouseClick","onCompletionMouseDown","popupCompletion","debouncedRenderCompletion","renderCompletion","setAttribute","addEventListener","onKeydown","hideCompletion","autoResize","textareaResize","style","resize","overflow","createCompletionElement","init","DOMReady","callback","readyState","syntaxHelp","createElement","className","appendChild","onscroll","throttle","onCompletionScroll","innerHTML","preventDefault","destroyCompletionElement","parentNode","removeChild","getJson","url","settings","onLoadError","request","abort","XMLHttpRequest","open","onload","status","success","JSON","parse","responseText","ontimeout","onerror","onprogress","send","initIntrospections","data","current_model","suggestions_api_url","message","console","error","selectCompletion","currentTarget","getAttribute","keyCode","onSubmit","form","submit","getComputedStyle","heightOffset","parseFloat","paddingTop","paddingBottom","height","scrollHeight","generateSuggestions","getContext","selectionStart","currentFullToken","textValue","startPos","tokenEndPos","textBefore","textAfter","trim","snippetAfterParts","split","join","endsWith","startsWith","textToPaste","cursorPosAfter","focus","setSelectionRange","display","highlight","dontForceDisplay","currentLi","completionRect","currentLiRect","liLen","loadingElement","suggestionsLen","li","querySelectorAll","getBoundingClientRect","bottom","scrollTop","top","removeEventListener","inputRect","pageYOffset","left","resolveName","f","nameParts","model","field","modelStack","relation","cursorPos","resolvedName","scope","lastToken","nextToLastToken","allTokens","pop","whitespace","logicalTokens","modelField","getCurrentFieldOptions","ctx","fieldOptions","cacheKey","isArray","loadMore","requestParams","search","cached","has_next","page","params","pair","parts","path","queryString","pairs","requestUrl","encodeURI","cache","cachedData","items","concat","populateFieldOptions","filter","item","toLowerCase","map","rectHeight","scrollBottom","searchFilter","selectionEnd","includes","lastIndexOf","nullable"],"mappings":"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","file":"js/completion.js","sourcesContent":["if (typeof module === \"object\" && typeof module.exports === \"object\") module.exports = Lexer;\n\nLexer.defunct = function (chr) {\n throw new Error(\"Unexpected character at index \" + (this.index - 1) + \": \" + chr);\n};\n\nfunction Lexer(defunct) {\n if (typeof defunct !== \"function\") defunct = Lexer.defunct;\n\n var tokens = [];\n var rules = [];\n var remove = 0;\n this.state = 0;\n this.index = 0;\n this.input = \"\";\n\n this.addRule = function (pattern, action, start) {\n var global = pattern.global;\n\n if (!global) {\n var flags = \"g\";\n if (pattern.multiline) flags += \"m\";\n if (pattern.ignoreCase) flags += \"i\";\n pattern = new RegExp(pattern.source, flags);\n }\n\n if (Object.prototype.toString.call(start) !== \"[object Array]\") start = [0];\n\n rules.push({\n pattern: pattern,\n global: global,\n action: action,\n start: start\n });\n\n return this;\n };\n\n this.setInput = function (input) {\n remove = 0;\n this.state = 0;\n this.index = 0;\n tokens.length = 0;\n this.input = input;\n return this;\n };\n\n this.lex = function () {\n if (tokens.length) return tokens.shift();\n\n this.reject = true;\n\n while (this.index <= this.input.length) {\n var matches = scan.call(this).splice(remove);\n var index = this.index;\n\n while (matches.length) {\n if (this.reject) {\n var match = matches.shift();\n var result = match.result;\n var length = match.length;\n this.index += length;\n this.reject = false;\n remove++;\n\n var token = match.action.apply(this, result);\n if (this.reject) this.index = result.index;\n else if (typeof token !== \"undefined\") {\n switch (Object.prototype.toString.call(token)) {\n case \"[object Array]\":\n tokens = token.slice(1);\n token = token[0];\n default:\n if (length) remove = 0;\n return token;\n }\n }\n } else break;\n }\n\n var input = this.input;\n\n if (index < input.length) {\n if (this.reject) {\n remove = 0;\n var token = defunct.call(this, input.charAt(this.index++));\n if (typeof token !== \"undefined\") {\n if (Object.prototype.toString.call(token) === \"[object Array]\") {\n tokens = token.slice(1);\n return token[0];\n } else return token;\n }\n } else {\n if (this.index !== index) remove = 0;\n this.reject = true;\n }\n } else if (matches.length)\n this.reject = true;\n else break;\n }\n };\n\n function scan() {\n var matches = [];\n var index = 0;\n\n var state = this.state;\n var lastIndex = this.index;\n var input = this.input;\n\n for (var i = 0, length = rules.length; i < length; i++) {\n var rule = rules[i];\n var start = rule.start;\n var states = start.length;\n\n if ((!states || start.indexOf(state) >= 0) ||\n (state % 2 && states === 1 && !start[0])) {\n var pattern = rule.pattern;\n pattern.lastIndex = lastIndex;\n var result = pattern.exec(input);\n\n if (result && result.index === lastIndex) {\n var j = matches.push({\n result: result,\n action: rule.action,\n length: result[0].length\n });\n\n if (rule.global) index = j;\n\n while (--j > index) {\n var k = j - 1;\n\n if (matches[j].length > matches[k].length) {\n var temple = matches[j];\n matches[j] = matches[k];\n matches[k] = temple;\n }\n }\n }\n }\n }\n\n return matches;\n }\n}\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","/**\n * https://github.com/rsms/js-lru/blob/v2/lru.js\n *\n * A doubly linked list-based Least Recently Used (LRU) cache. Will keep most\n * recently used items while discarding least recently used items when its limit\n * is reached.\n *\n * Licensed under MIT. Copyright (c) 2010 Rasmus Andersson \n * See README.md for details.\n *\n * Illustration of the design:\n *\n * entry entry entry entry\n * ______ ______ ______ ______\n * | head |.newer => | |.newer => | |.newer => | tail |\n * | A | | B | | C | | D |\n * |______| <= older.|______| <= older.|______| <= older.|______|\n *\n * removed <-- <-- <-- <-- <-- <-- <-- <-- <-- <-- <-- added\n */\nfunction LRUCache (limit) {\n // Current size of the cache. (Read-only).\n this.size = 0;\n // Maximum number of items this cache can hold.\n this.limit = limit;\n this.oldest = this.newest = undefined;\n this._keymap = {};\n}\n\n\nLRUCache.prototype._markEntryAsUsed = function(entry) {\n if (entry === this.newest) {\n // Already the most recenlty used entry, so no need to update the list\n return;\n }\n // HEAD--------------TAIL\n // <.older .newer>\n // <--- add direction --\n // A B C E\n if (entry.newer) {\n if (entry === this.oldest) {\n this.oldest = entry.newer;\n }\n entry.newer.older = entry.older; // C <-- E.\n }\n if (entry.older) {\n entry.older.newer = entry.newer; // C. --> E\n }\n entry.newer = undefined; // D --x\n entry.older = this.newest; // D. --> E\n if (this.newest) {\n this.newest.newer = entry; // E. <-- D\n }\n this.newest = entry;\n};\n\n/**\n * Put into the cache associated with . Returns the entry which was\n * removed to make room for the new entry. Otherwise undefined is returned\n * (i.e. if there was enough room already).\n */\nLRUCache.prototype.put = function(key, value) {\n var entry = this._keymap[key];\n\n if (entry) {\n // update existing\n entry.value = value;\n this._markEntryAsUsed(entry);\n return;\n }\n\n // new entry\n this._keymap[key] = entry = {key:key, value:value, older:undefined, newer:undefined};\n\n if (this.newest) {\n // link previous tail to the new tail (entry)\n this.newest.newer = entry;\n entry.older = this.newest;\n } else {\n // we're first in -- yay\n this.oldest = entry;\n }\n\n // add new entry to the end of the linked list -- it's now the freshest entry.\n this.newest = entry;\n this.size++;\n if (this.size > this.limit) {\n // we hit the limit -- remove the head\n return this.shift();\n }\n};\n\n/**\n * Purge the least recently used (oldest) entry from the cache. Returns the\n * removed entry or undefined if the cache was empty.\n *\n * If you need to perform any form of finalization of purged items, this is a\n * good place to do it. Simply override/replace this function:\n *\n * var c = new LRUCache(123);\n * c.shift = function() {\n * var entry = LRUCache.prototype.shift.call(this);\n * doSomethingWith(entry);\n * return entry;\n * }\n */\nLRUCache.prototype.shift = function() {\n // todo: handle special case when limit == 1\n var entry = this.oldest;\n if (entry) {\n if (this.oldest.newer) {\n // advance the list\n this.oldest = this.oldest.newer;\n this.oldest.older = undefined;\n } else {\n // the cache is exhausted\n this.oldest = undefined;\n this.newest = undefined;\n }\n // Remove last strong reference to and remove links from the purged\n // entry being returned:\n entry.newer = entry.older = undefined;\n // delete is slow, but we need to do this to avoid uncontrollable growth:\n delete this._keymap[entry.key];\n this.size--;\n }\n return entry;\n};\n\n/**\n * Get and register recent use of . Returns the value associated with \n * or undefined if not in cache.\n */\nLRUCache.prototype.get = function(key, returnEntry) {\n // First, find our cache entry\n var entry = this._keymap[key];\n if (entry === undefined) return; // Not cached. Sorry.\n // As was found in the cache, register it as being requested recently\n this._markEntryAsUsed(entry);\n return returnEntry ? entry : entry.value;\n};\n\n// ----------------------------------------------------------------------------\n// Following code is optional and can be removed without breaking the core\n// functionality.\n\n/**\n * Check if is in the cache without registering recent use. Feasible if\n * you do not want to chage the state of the cache, but only \"peek\" at it.\n * Returns the entry associated with if found, or undefined if not found.\n */\nLRUCache.prototype.find = function(key) {\n return this._keymap[key];\n};\n\n/**\n * Update the value of entry with . Returns the old value, or undefined if\n * entry was not in the cache.\n */\nLRUCache.prototype.set = function(key, value) {\n var oldvalue, entry = this.get(key, true);\n if (entry) {\n oldvalue = entry.value;\n entry.value = value;\n } else {\n oldvalue = this.put(key, value);\n if (oldvalue) oldvalue = oldvalue.value;\n }\n return oldvalue;\n};\n\n/**\n * Remove entry from cache and return its value. Returns undefined if not\n * found.\n */\nLRUCache.prototype.remove = function(key) {\n var entry = this._keymap[key];\n if (!entry) return;\n delete this._keymap[entry.key]; // need to do delete unfortunately\n if (entry.newer && entry.older) {\n // relink the older entry with the newer entry\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n } else if (entry.newer) {\n // remove the link to us\n entry.newer.older = undefined;\n // link the newer entry to head\n this.oldest = entry.newer;\n } else if (entry.older) {\n // remove the link to us\n entry.older.newer = undefined;\n // link the newer entry to head\n this.newest = entry.older;\n } else {// if(entry.older === undefined && entry.newer === undefined) {\n this.oldest = this.newest = undefined;\n }\n\n this.size--;\n return entry.value;\n};\n\n/** Removes all entries */\nLRUCache.prototype.removeAll = function() {\n // This should be safe, as we never expose strong refrences to the outside\n this.oldest = this.newest = undefined;\n this.size = 0;\n this._keymap = {};\n};\n\n/**\n * Return an array containing all keys of entries stored in the cache object, in\n * arbitrary order.\n */\nif (typeof Object.keys === 'function') {\n LRUCache.prototype.keys = function() {\n return Object.keys(this._keymap);\n };\n} else {\n LRUCache.prototype.keys = function() {\n var keys = [];\n for (var k in this._keymap) {\n keys.push(k);\n }\n return keys;\n };\n}\n\n/**\n * Call `fun` for each entry. Starting with the newest entry if `desc` is a true\n * value, otherwise starts with the oldest (head) enrty and moves towards the\n * tail.\n *\n * `fun` is called with 3 arguments in the context `context`:\n * `fun.call(context, Object key, Object value, LRUCache self)`\n */\nLRUCache.prototype.forEach = function(fun, context, desc) {\n var entry;\n if (context === true) {\n desc = true;\n context = undefined;\n } else if (typeof context !== 'object') {\n context = this;\n }\n if (desc) {\n entry = this.newest;\n while (entry) {\n fun.call(context, entry.key, entry.value, this);\n entry = entry.older;\n }\n } else {\n entry = this.oldest;\n while (entry) {\n fun.call(context, entry.key, entry.value, this);\n entry = entry.newer;\n }\n }\n};\n\n/** Returns a JSON (array) representation */\nLRUCache.prototype.toJSON = function() {\n var s = new Array(this.size), i = 0, entry = this.oldest;\n while (entry) {\n s[i++] = { key: entry.key, value: entry.value };\n entry = entry.newer;\n }\n return s;\n};\n\n/** Returns a String representation */\nLRUCache.prototype.toString = function() {\n var s = '', entry = this.oldest;\n while (entry) {\n s += String(entry.key)+':'+entry.value;\n entry = entry.newer;\n if (entry) {\n s += ' < ';\n }\n }\n return s;\n};\n\n// Export ourselves\nexport default LRUCache;\n","import Lexer from 'lex';\nimport debounce from 'lodash/debounce';\nimport isObject from 'lodash/isObject';\nimport throttle from 'lodash/throttle';\n\nimport LRUCache from './lru-cache';\nimport { DOMReady, escapeRegExp, setUrlParams } from './utils';\n\nconst reIntValue = '(-?0|-?[1-9][0-9]*)';\nconst reFractionPart = '\\\\.[0-9]+';\nconst reExponentPart = '[eE][+-]?[0-9]+';\nconst intRegex = new RegExp(reIntValue);\nconst floatRegex = new RegExp(\n `${reIntValue}${reFractionPart}${reExponentPart}`\n + `|${reIntValue}${reFractionPart}|${reIntValue}${reExponentPart}`,\n);\nconst reLineTerminators = '\\\\n\\\\r\\\\u2028\\\\u2029';\nconst reEscapedChar = '\\\\\\\\[\\\\\\\\\"\\\\\\\\\\'/bfnrt]';\nconst reEscapedUnicode = '\\\\\\\\u[0-9A-Fa-f]{4}';\nconst reDoubleQuotedStringChar = `[^\\\\\\\\\"\\\\\\\\\\\\\\\\${reLineTerminators}]`;\nconst reDoubleQuotedString = (\n `\\\\\"(${reEscapedChar}|${reEscapedUnicode}|${reDoubleQuotedStringChar})*\\\\\"`\n);\nconst reSingleQuotedStringChar = `[^\\\\\\\\'\\\\\\\\\\\\\\\\${reLineTerminators}]`;\nconst reSingleQuotedString = (\n `\\\\'(${reEscapedChar}|${reEscapedUnicode}|${reSingleQuotedStringChar})*\\\\'`\n);\nconst stringRegex = new RegExp(\n `${reDoubleQuotedString}|${reSingleQuotedString}`,\n);\nconst nameRegex = /[_A-Za-z][_0-9A-Za-z]*(\\.[_A-Za-z][_0-9A-Za-z]*)*/;\nconst reNotFollowedByName = '(?![_0-9A-Za-z])';\nconst whitespaceRegex = /[ \\t\\v\\f\\u00A0]+/;\n\nconst lexer = new Lexer(() => {\n // Silently swallow any lexer errors\n});\n\nfunction token(name, value) {\n return { name, value };\n}\n\nlexer.addRule(whitespaceRegex, () => { /* ignore whitespace */ });\nlexer.addRule(/\\./, (l) => token('DOT', l));\nlexer.addRule(/,/, (l) => token('COMMA', l));\nlexer.addRule(new RegExp(`or${reNotFollowedByName}`), (l) => token('OR', l));\nlexer.addRule(new RegExp(`and${reNotFollowedByName}`), (l) => token('AND', l));\nlexer.addRule(new RegExp(`not${reNotFollowedByName}`), (l) => token('NOT', l));\nlexer.addRule(new RegExp(`in${reNotFollowedByName}`), (l) => token('IN', l));\nlexer.addRule(\n new RegExp(`startswith${reNotFollowedByName}`),\n (l) => token('STARTSWITH', l),\n);\nlexer.addRule(\n new RegExp(`endswith${reNotFollowedByName}`),\n (l) => token('ENDSWITH', l),\n);\nlexer.addRule(\n new RegExp(`True${reNotFollowedByName}`),\n (l) => token('TRUE', l),\n);\nlexer.addRule(\n new RegExp(`False${reNotFollowedByName}`),\n (l) => token('FALSE', l),\n);\nlexer.addRule(\n new RegExp(`None${reNotFollowedByName}`),\n (l) => token('NONE', l),\n);\nlexer.addRule(nameRegex, (l) => token('NAME', l));\nlexer.addRule(\n stringRegex,\n // Trim leading and trailing quotes:\n (l) => token('STRING_VALUE', l.slice(1, l.length - 1)),\n);\nlexer.addRule(intRegex, (l) => token('INT_VALUE', l));\nlexer.addRule(floatRegex, (l) => token('FLOAT_VALUE', l));\nlexer.addRule(/\\(/, (l) => token('PAREN_L', l));\nlexer.addRule(/\\)/, (l) => token('PAREN_R', l));\nlexer.addRule(/=/, (l) => token('EQUALS', l));\nlexer.addRule(/!=/, (l) => token('NOT_EQUALS', l));\nlexer.addRule(/>/, (l) => token('GREATER', l));\nlexer.addRule(/>=/, (l) => token('GREATER_EQUAL', l));\nlexer.addRule(/ token('LESS', l));\nlexer.addRule(/<=/, (l) => token('LESS_EQUAL', l));\nlexer.addRule(/~/, (l) => token('CONTAINS', l));\nlexer.addRule(/!~/, (l) => token('NOT_CONTAINS', l));\nlexer.lexAll = function () {\n let match;\n const result = [];\n while (match = this.lex()) { // eslint-disable-line no-cond-assign\n match.start = this.index - match.value.length;\n match.end = this.index;\n result.push(match);\n }\n return result;\n};\n\nfunction suggestion(text, snippetBefore, snippetAfter, explanation) {\n // text is being displayed in completion box and pasted when you hit Enter.\n // snippetBefore is an optional extra text to be pasted before main text.\n // snippetAfter is an optional text to be pasted after. It may also include\n // \"|\" symbol to designate desired cursor position after paste.\n let suggestionText = text;\n if (typeof explanation !== 'undefined') {\n suggestionText += `${explanation}`;\n }\n\n return {\n text,\n snippetBefore: snippetBefore || '',\n snippetAfter: snippetAfter || '',\n suggestionText,\n };\n}\n\n// Main DjangoQL object\nconst DjangoQL = function (options) {\n let cacheSize = 100;\n\n this.options = options;\n this.currentModel = null;\n this.models = {};\n this.suggestionsAPIUrl = null;\n\n this.token = token;\n this.lexer = lexer;\n\n this.prefix = '';\n this.suggestions = [];\n this.selected = null;\n this.valuesCaseSensitive = false;\n this.highlightCaseSensitive = true;\n\n this.textarea = null;\n this.completion = null;\n this.completionUL = null;\n this.completionEnabled = false;\n\n // Initialization\n if (!isObject(options)) {\n this.logError('Please pass an object with initialization parameters');\n return;\n }\n this.loadIntrospections(options.introspections);\n if (typeof options.selector === 'string') {\n this.textarea = document.querySelector(options.selector);\n } else {\n this.textarea = options.selector;\n }\n if (!this.textarea) {\n this.logError(`Element not found by selector: ${options.selector}`);\n return;\n }\n if (this.textarea.tagName !== 'TEXTAREA') {\n this.logError(\n 'selector must be pointing to