From 8afdec139bbb45bfd597fa737cb650d2f61c4625 Mon Sep 17 00:00:00 2001 From: Norm Rasmussen Date: Mon, 13 Mar 2023 17:23:56 -0400 Subject: [PATCH] So close! I'm able to use syntax highlighting AND grab the content with js (which then adds to a textarea), but the Flask for loop is only noticed on the first iteration. I can't grab the subsequent values. I need to find a way to dynamically find IDs. --- .DS_Store | Bin 0 -> 6148 bytes __pycache__/config.cpython-311.pyc | Bin 556 -> 556 bytes app/__init__.py | 8 ++- app/__pycache__/__init__.cpython-311.pyc | Bin 536 -> 653 bytes app/__pycache__/forms.cpython-311.pyc | Bin 0 -> 802 bytes app/__pycache__/routes.cpython-311.pyc | Bin 18580 -> 19324 bytes app/forms.py | 12 ++-- app/routes.py | 68 +++++++++++------- app/static/.DS_Store | Bin 0 -> 6148 bytes app/static/css/prism.css | 4 ++ app/static/css/prism.js | 7 ++ app/static/css/styles.css | 11 ++- app/static/getallgroups.js | 40 ----------- app/templates/head.html | 17 +++-- app/templates/templates.html | 87 +++++++++++++++++++---- config.py | 1 - 16 files changed, 160 insertions(+), 95 deletions(-) create mode 100644 .DS_Store create mode 100644 app/__pycache__/forms.cpython-311.pyc create mode 100644 app/static/.DS_Store create mode 100644 app/static/css/prism.css create mode 100644 app/static/css/prism.js delete mode 100644 app/static/getallgroups.js diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0fQ40Fa~zrvLx| delta 34 ocmZ3(vWA6sIWI340}%Z6f0rD;kvD~rk!5lbV-q9W@~1>FPUMqdoHkLt!IU+FF^VIFA%!i6HJ3ArGnXrhi;*FP zJ(xk0<0VMBCgUwux17Y{Y#@WpIX^EgGrh`rvJ<1ZNpVSHNoKNsT4qja@h#ra03Uxx zmv}dS9~al4Tg=JDWtvR4*oyK?OMtShY57ID#eSOH6MtDr-x6~4@$nCLb%}S42yyib z_Vo7)E@B5-Rm3sbj4_f+2*_jv;^MZ+GZ}-e!x$TQAINDpFt>1Z*k5Fjz9A+(A^ZY^ P&;th93%F5{0MG;g@PkF) delta 182 zcmeBWox#GloR^o20SG3a{-1oCVIrRdW6wnOhG2#i)*RMcjwlXBh7`7722J*tAVr#t zw^-eB5{t8e3^wQdytK^pDxTt!#FETp{j|)S)Z$ybp#eVrjxO&Q3o-jLO5U~b{+u)oM4{eVI20yb2{ H3)BJtRJ1b_ diff --git a/app/__pycache__/forms.cpython-311.pyc b/app/__pycache__/forms.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..020f382b02252e6bf107717bd10cf0c09c5b0a95 GIT binary patch literal 802 zcmZuuzi-n}5WeSMN!z3yng}`}8VM-~HAtvPNC*%`VM;*?EM~BryqDDAXQ%Jks@O6x zFm@{=QxGbDOpq9?w=%J%YNt-zv)xJ&oZp?lyL-C(?%lU~eHBpb`x|tZ0Q}a@mDnXX z?;3Y3JviA#vaMrd%;HFIo+7PnoSfB`RoTAzU0jLb}cQ`ACShdO;|SN>?XP1H&^ z^yP&iGW15B<*F5hq^}`|~^bD$=lx@8s zjw>u3b7cMy-{D+yynNbuE3t7WLSn*~Je86~ofq*iPB%%Ps#J8?vz3 zQC_);=(75_c(^BG3thc28KYU4gpdqw&6iIGcjn6{g9r2Fv#>1ETEM^N_|ch;Ui>GO G6Z#9R#na{h literal 0 HcmV?d00001 diff --git a/app/__pycache__/routes.cpython-311.pyc b/app/__pycache__/routes.cpython-311.pyc index bbbc819a134f3af25c547da925a21194411cda3f..d415f5cdef58e258c129571220c5db00deb4474e 100644 GIT binary patch delta 5604 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 SGubo2{!)6*Py}T5=J;Q%nux;y diff --git a/app/forms.py b/app/forms.py index 47edf23..cd95e1a 100644 --- a/app/forms.py +++ b/app/forms.py @@ -1,8 +1,10 @@ from flask_wtf import FlaskForm -from wtforms import StringField, PasswordField, BooleanField, SubmitField -from wtforms.validators import DataRequired +from wtforms.fields import SubmitField +from flask_codemirror.fields import CodeMirrorField +class TemplateForm(FlaskForm): + template_code = CodeMirrorField( + language='htmlembedded', + config={'lineNumbers': 'true'}) + submit = SubmitField('Submit') -class RequestForm(FlaskForm): - apikey = StringField("Academy API Key", validators=[DataRequired()]) - submit = SubmitField("Submit") diff --git a/app/routes.py b/app/routes.py index 1b0ceb7..0fe81bf 100644 --- a/app/routes.py +++ b/app/routes.py @@ -3,8 +3,8 @@ import itertools import re import os import csv +from .forms import TemplateForm from functools import wraps -from app import app from flask import ( redirect, flash, @@ -15,9 +15,7 @@ from flask import ( url_for, ) from werkzeug.utils import secure_filename - -# Global Variables -url = "https://api.northpass.com/" +from app import app, forms # Upload folder UPLOAD_FOLDER = "/Users/normrasmussen/Documents/Projects/CSM_webapp/app/static/files" @@ -25,6 +23,8 @@ UPLOAD_FOLDER = "/Users/normrasmussen/Documents/Projects/CSM_webapp/app/static/f app.config["UPLOAD_FOLDER"] = UPLOAD_FOLDER ALLOWED_EXTENSIONS = {"csv"} +# Global Variables +url = "https://api.northpass.com/" def download_csv(): if request.method == "GET": @@ -200,7 +200,6 @@ def bulk_add(): emails = emails.split() if groups: - print(groups) if "\n" in groups: groups = groups.split("\n") groups = [group.strip() for group in groups] @@ -305,7 +304,8 @@ def load_templates(): data = response.json() nextlink = data["links"] for response in data["data"]: - name, body = (response["attributes"]["name"], response["attributes"]["body"]) + name, body = ( + response["attributes"]["name"], response["attributes"]["body"]) templates.append((name,body)) if "next" not in nextlink: @@ -313,7 +313,7 @@ def load_templates(): return render_template("templates.html", title="Templates", - templates=templates + templates=templates, ) return render_template("options.html") @@ -322,32 +322,41 @@ def load_templates(): @key_required def templates(): if request.method == "POST": - name = request.form.get('template_name') - body = request.form.get('body') - print(name) - endpoint = "v2/custom_templates" - headers = { - "accept": "application/json", - "content-type": "application/json", - "X-Api-Key": session["key"], - } - payload = {"custom_template": { - "name":name, - "body":body - }} - response = requests.post(url+endpoint, json=payload, headers=headers) - return check_templates(response) - return render_template("templates.html", error="Uh oh!") + if request.form['submit-template']: + name = request.form.get('template_name') + body = request.form.get("loaded-content") + if body == "": + error = "Ooph. Looks like you didn't load the changes before submitting." + return render_template("templates.html", error=error) + else: + endpoint = "v2/custom_templates" + headers = { + "accept": "application/json", + "content-type": "application/json", + "X-Api-Key": session["key"], + } + payload = {"custom_template": { + "name":name, + "body":body + }} + response = requests.post(url+endpoint, json=payload, headers=headers) + return check_templates(response) + return load_templates() def check_templates(response): print(response) response = str(response) if "201" in response: error = "Success! Templates Uploaded." - return render_template("templates.html", title="People Added", error=error) + return render_template("templates.html", + title="Templates Added", + error=error) elif "403" in response: error = "Uh oh. Looks like you don't have appropriate privileges." return render_template("templates.html", error=error) + elif "404" in response: + error = "Hm. Looks like something was wrong in the templates." + return render_template("templates.html", error=error) else: error = "Something went wrong, but I'm not sure what." return render_template("templates.html", title="Shrug", error=error) @@ -364,10 +373,17 @@ def bulk_courses_to_groups(): def bulk_invite_ppl(): pass +@app.route('/cmtest', methods = ['GET', 'POST']) +def cmtest(): + form = TemplateForm() + if form.validate_on_submit(): + text = form.template_code.data + return render_template('templates.html', form=form) + app.secret_key = "@&I\x1a?\xce\x94\xbb0w\x17\xbf&Y\xa2\xc2(A\xf5\xf2\x97\xba\xeb\xfa" -if __name__ == "__main__": - ask_key() +#if __name__ == "__main__": +# ask_key() diff --git a/app/static/.DS_Store b/app/static/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c97cc1caf2b8bcbdd6fd0f4c5cae7ce39098cafa GIT binary patch literal 6148 zcmeHKOHKnZ47H()5p23-nJe@Lp&Cxm3!ruoAa#@qsjRc+K3#XiIXDZ?AJB|CNQeaz z$R0V*N$h-{G)YWEyxeySqB#*YP(c=BLZo@J>&%^JK-MvOdZZ_O1^PEc)_y@7thl2) z8mxbNzgTTbzZ-00(yuRVyWW;H{F?G|d_KIrUVk-aU%GGm?jBC&A1o!zU?3O>27-ZL z;KvN$&K7Ad4WkSOf`MS*lL0v&5>zldRzp2HP-qGOlxMUGY{?}gCOKxuYKR^PTPV;% z*;5R*aI`1)%Z}C1!ihckV4wLTd10L$<0o||&W2G21Hr(Ufpe?Q<^I3HFEg3sk3*ss z3N*zn7a)lf!}b`1x{ OLqG|MA{h7u2HpWk7Bj{G literal 0 HcmV?d00001 diff --git a/app/static/css/prism.css b/app/static/css/prism.css new file mode 100644 index 0000000..9cb5d03 --- /dev/null +++ b/app/static/css/prism.css @@ -0,0 +1,4 @@ +/* PrismJS 1.29.0 +https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+clike+javascript&plugins=line-numbers */ +code[class*=language-],pre[class*=language-]{color:#ccc;background:0 0;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green} +pre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right} diff --git a/app/static/css/prism.js b/app/static/css/prism.js new file mode 100644 index 0000000..34ec15d --- /dev/null +++ b/app/static/css/prism.js @@ -0,0 +1,7 @@ +/* PrismJS 1.29.0 +https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+clike+javascript&plugins=line-numbers */ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,r={},a={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof i?new i(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=g.reach);A+=w.value.length,w=w.next){var E=w.value;if(n.length>e.length)return;if(!(E instanceof i)){var P,L=1;if(y){if(!(P=l(b,A,e,m))||P.index>=e.length)break;var S=P.index,O=P.index+P[0].length,j=A;for(j+=w.value.length;S>=j;)j+=(w=w.next).value.length;if(A=j-=w.value.length,w.value instanceof i)continue;for(var C=w;C!==n.tail&&(jg.reach&&(g.reach=W);var z=w.prev;if(_&&(z=u(n,z,_),A+=_.length),c(n,z,L),w=u(n,z,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),L>1){var I={cause:f+","+d,reach:W};o(e,n,t,w.prev,A,I),g&&I.reach>g.reach&&(g.reach=I.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a"+i.content+""},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener("message",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var h=document.readyState;"loading"===h||"interactive"===h&&g&&g.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",(function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))})),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var t={"included-cdata":{pattern://i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,(function(){return a})),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml; +Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}; +Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp("(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])"),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp("((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript; +!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var e="line-numbers",n=/\n(?!$)/g,t=Prism.plugins.lineNumbers={getLine:function(n,t){if("PRE"===n.tagName&&n.classList.contains(e)){var i=n.querySelector(".line-numbers-rows");if(i){var r=parseInt(n.getAttribute("data-start"),10)||1,s=r+(i.children.length-1);ts&&(t=s);var l=t-r;return i.children[l]}}},resize:function(e){r([e])},assumeViewportIndependence:!0},i=void 0;window.addEventListener("resize",(function(){t.assumeViewportIndependence&&i===window.innerWidth||(i=window.innerWidth,r(Array.prototype.slice.call(document.querySelectorAll("pre.line-numbers"))))})),Prism.hooks.add("complete",(function(t){if(t.code){var i=t.element,s=i.parentNode;if(s&&/pre/i.test(s.nodeName)&&!i.querySelector(".line-numbers-rows")&&Prism.util.isActive(i,e)){i.classList.remove(e),s.classList.add(e);var l,o=t.code.match(n),a=o?o.length+1:1,u=new Array(a+1).join("");(l=document.createElement("span")).setAttribute("aria-hidden","true"),l.className="line-numbers-rows",l.innerHTML=u,s.hasAttribute("data-start")&&(s.style.counterReset="linenumber "+(parseInt(s.getAttribute("data-start"),10)-1)),t.element.appendChild(l),r([s]),Prism.hooks.run("line-numbers",t)}}})),Prism.hooks.add("line-numbers",(function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0}))}function r(e){if(0!=(e=e.filter((function(e){var n,t=(n=e,n?window.getComputedStyle?getComputedStyle(n):n.currentStyle||null:null)["white-space"];return"pre-wrap"===t||"pre-line"===t}))).length){var t=e.map((function(e){var t=e.querySelector("code"),i=e.querySelector(".line-numbers-rows");if(t&&i){var r=e.querySelector(".line-numbers-sizer"),s=t.textContent.split(n);r||((r=document.createElement("span")).className="line-numbers-sizer",t.appendChild(r)),r.innerHTML="0",r.style.display="block";var l=r.getBoundingClientRect().height;return r.innerHTML="",{element:e,lines:s,lineHeights:[],oneLinerHeight:l,sizer:r}}})).filter(Boolean);t.forEach((function(e){var n=e.sizer,t=e.lines,i=e.lineHeights,r=e.oneLinerHeight;i[t.length-1]=void 0,t.forEach((function(e,t){if(e&&e.length>1){var s=n.appendChild(document.createElement("span"));s.style.display="block",s.textContent=e}else i[t]=r}))})),t.forEach((function(e){for(var n=e.sizer,t=e.lineHeights,i=0,r=0;r { - if(num === 1){ - } - let page = num; - - await axios({ - method: 'get', - url: `https://api.northpass.com/v2/groups?page=${page}`, - headers: { - 'accept': '*/*', - 'x-api-key': apiKey, - 'content-type': 'application/json' - } - }) - .then(async (res) => { - if (res.data.links.next != null) { - page++; - for (let i = 0; i < res.data.data.length; i++) { - let groupName = res.data.data[i].attributes.name; - selectInput = ''; - $('#groups').append(selectInput); - groups.push(res.data.data[i].attributes.name); - } - await getAllGroups(page); - } else { - for (let i = 0; i < res.data.data.length; i++) { - groups.push(res.data.data[i].attributes.name); - } - } - }) - .catch(err => { - console.log(err); - }) -} diff --git a/app/templates/head.html b/app/templates/head.html index 4ed7440..e54e670 100644 --- a/app/templates/head.html +++ b/app/templates/head.html @@ -15,15 +15,20 @@ - + - + + + {% block content %} {% endblock %} + + + diff --git a/app/templates/templates.html b/app/templates/templates.html index a5153cf..9e0d08d 100644 --- a/app/templates/templates.html +++ b/app/templates/templates.html @@ -7,12 +7,13 @@

{{ error }}

{% endif %} {% if templates %} -

Here are the liquid templates

+

Here are the liquid templates for

+

{{ session.school }}

{% endif %}
{% for templates in templates %}

 

-
+
{{ templates[0] }} - -

 

+ + {{ templates[1] }} + +

 

- +
Click here to load changes
+ +

 

{% endfor %} + + + + + diff --git a/config.py b/config.py index b10288f..54a83c3 100644 --- a/config.py +++ b/config.py @@ -1,5 +1,4 @@ import os - class Config(object): SECRET_KEY = os.environ.get("NORTHPASS") or "north-pass"