From b8c47c8dbad8b417b4d4b059658116fb6af4da5b Mon Sep 17 00:00:00 2001 From: jatinkhemchandani Date: Fri, 24 May 2019 11:05:28 +0530 Subject: [PATCH 1/9] Document the defined Classes/Models in server file All the Classed included in server files are properly Documented. This will help to understand the properties of these model properly. --- server.py | 47 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/server.py b/server.py index f1f874d..d6ffe0c 100644 --- a/server.py +++ b/server.py @@ -12,15 +12,22 @@ db = SqliteDatabase(DATABASE_NAME) - +""" +User :Class + Defines username and password for individual user. +""" class User(Model): username = CharField(unique=True) password = CharField() class Meta: database = db - - + +""" +Session :Class + Generates randam token for every section + new Token is assigned to every User for every new session +""" class Session(Model): def random_token(): return "".join([random.choice(string.ascii_letters) for _ in range(20)]) @@ -31,7 +38,13 @@ def random_token(): class Meta: database = db - +""" +Contest :Class + Each Contest instance contains:- + Code + Description of contest + Contest start time and End Time +""" class Contest(Model): code = CharField(unique=True) description = CharField() @@ -39,26 +52,47 @@ class Contest(Model): end_time = DateTimeField() class Meta: + #define the database in the main class database = db - +""" +Question :Class + Each Question has a Question no and a author + associated to it +""" class Question(Model): q_no = IntegerField(unique=True) author = ForeignKeyField(User) class Meta: + #define the database in the main class database = db +""" +ContestProblems : Class + All contest problems belong to a Contest and are itself a question. + contest defines the instance of Contest Class it belongs + question defines the questions that belongs to that contest. +""" class ContestProblems(Model): contest = ForeignKeyField(Contest, backref="questions") question = ForeignKeyField(Question) class Meta: database = db + #define the database in the main class indexes = ((("contest", "question"), True),) - +""" +Submissision :class + Class defines the submission of solution of a Question + Stores the information about: + User that submits the Solution + Time of Submission + Contest to whish The question belongs + Whether the soolution is correct +""" class Submission(Model): user = ForeignKeyField(User) time = DateTimeField() @@ -67,6 +101,7 @@ class Submission(Model): class Meta: database = db + #define the database in the main class indexes = ((("user", "time"), True),) From 085c4f14978f5f53f0b544d23901554e35798155 Mon Sep 17 00:00:00 2001 From: jatinkhemchandani Date: Fri, 24 May 2019 13:40:02 +0530 Subject: [PATCH 2/9] Document all the methods in server file All the methods included in server files are properly Documented. This will help to understand the properties of these model properly. --- server.py | 204 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 183 insertions(+), 21 deletions(-) diff --git a/server.py b/server.py index d6ffe0c..dc44c06 100644 --- a/server.py +++ b/server.py @@ -105,8 +105,10 @@ class Meta: indexes = ((("user", "time"), True),) -db.connect() -db.create_tables([User, Session, Submission, ContestProblems, Contest, Question]) +db.connect()# Establish a Connection with Database + +db.create_tables([User, Session, Submission, ContestProblems, Contest, Question])# Create Tables with +#specied fields in Databse # dummy contest data @@ -135,8 +137,10 @@ class Meta: end_time=datetime.datetime(day=1, month=10, year=2020), ) +# Create a test User test = User.get_or_create(username="test", password="test") +# Create test Questions q1 = Question.get_or_create(q_no=1, author=test[0]) q2 = Question.get_or_create(q_no=2, author=test[0]) q3 = Question.get_or_create(q_no=3, author=test[0]) @@ -144,6 +148,8 @@ class Meta: q5 = Question.get_or_create(q_no=5, author=test[0]) q6 = Question.get_or_create(q_no=6, author=test[0]) +# Add Questions to contest +# Contest Problem Instance is created which is used to assign question to specific contests. ContestProblems.get_or_create(contest=practiceContest[0], question=q1[0]) ContestProblems.get_or_create(contest=practiceContest[0], question=q2[0]) ContestProblems.get_or_create(contest=pastContest[0], question=q1[0]) @@ -153,7 +159,15 @@ class Meta: ContestProblems.get_or_create(contest=futureContest[0], question=q5[0]) ContestProblems.get_or_create(contest=futureContest[0], question=q6[0]) - +""" +login_required: method /decorator function + Extends the functainality of a funcion by checking log in condition. + Checks if the user is logged in.if not redirect the user to home page + with message 'Login Required' + parameters : Function on which decorator is applied + + +""" def login_required(function): def login_redirect(*args, **kwargs): if not logggedIn(): @@ -163,27 +177,50 @@ def login_redirect(*args, **kwargs): return login_redirect -@app.route("/") +""" +changePath: method + redirects to home page +""" +@app.route("/")# Sets the url that trigger following function def changePath(): return bottle.redirect("/home") -@app.get("/home") -def home(): +""" +home : method + redirects to Dashboard of the user +""" +@app.get("/home")# Sets the base url as the argument. +def home(): if logggedIn(): return bottle.redirect("/dashboard") return bottle.template("home.html", message="") - -@app.get("/dashboard") -@login_required +""" +changePath: method + redirects to Dashboard of the user +""" +@app.get("/dashboard")# Sets the base url as the argument. +@login_required# Checks if user is logged in or not def dashboard(): contests = Contest.select().order_by(Contest.start_time) return bottle.template("dashboard.html", contests=contests) -@app.get("/contest//") -@login_required +""" +question: method + Checks if the question and Contest it belongs does exists. + If exists : it checks the current status of the contest + And then returns the question state ment along with question numbers + and contest code to the Template + Parameters: + code: Contest Code + number: Question Number + Return: + Question Template +""" +@app.get("/contest//")# Sets the base url as the argument. +@login_required# Checks if user is logged in or not def question(code, number): if ( not ContestProblems.select() @@ -203,6 +240,16 @@ def question(code, number): ) + +""" +contest: method + Checks if contest exists by validating the contest id. + Checks the the current staus of code + Parameters: + code : contest code + Return : + Contest Template +""" @app.get("/contest/") @login_required def contest(code): @@ -215,16 +262,46 @@ def contest(code): return bottle.template("contest.html", contest=contest, questions=contest.questions) +""" +download: method + Downloads the question to local system + Parameters: + path :path to download from + Return : + Static Files: Downloadable Files +""" @app.get("/question/") def download(path): return bottle.static_file(path, root=question_dir) +""" +server_static: method + Static files for server + Parameters: + path :path of file + Return : + Static Files +""" @app.get("/static/") def server_static(filepath): return bottle.static_file(filepath, root=os.path.join(dir_path, "static")) +""" +contest_ranking: method + Generates rankinks of users in a Contest i.e the Contest results + Validates the Sumbission And Contest + Checks the number of correct submissions for each user and Added to + list with tuples of Username Along with thier Scores . The tuples + are added to list in descending order of the score .Then rankings are + given to each Username in the list. + + Parameters: + code : contest code + Return : + Ranking Template with ranks of different user in a contest. +""" @app.get("/ranking/") def contest_ranking(code): order = ( @@ -239,15 +316,23 @@ def contest_ranking(code): .switch() .join(ContestProblems, on=(Submission.contestProblem == ContestProblems.id)) .group_by(Submission.user) - .order_by(fn.count(Submission.contestProblem.distinct()).desc()) + .order_by(fn.count(Submission.contestProblem.distinct()).desc())# descending order on basis of no of solution ) order = list(order.tuples()) order = [ (username, score, rank) for rank, (username, score) in enumerate(order, start=1) - ] + ]# associate ranks to each user return bottle.template("rankings.html", people=order) +""" +rankings: method + Overall Ranking of the user over all the Contest. + Parameters: + None + Return : + Ranking Template with Overall Ranking +""" @app.get("/ranking") def rankings(): order = ( @@ -267,6 +352,17 @@ def rankings(): ] return bottle.template("rankings.html", people=order) + +""" +loggedIn: method + Downloads the question to local system + Parameters: + None + Return : + True: if Session exixsts for the user Logged In + False: if Session not exixst for the user Logged In + or if the s_id is not present or is wrong +""" def logggedIn(): if not bottle.request.get_cookie("s_id"): return False @@ -277,6 +373,16 @@ def logggedIn(): ) +""" +createSession: method + Create a session for the user + Set up cookie for The current session with seesion id ,token and expiry + time + Parameters: + username: Username of user For whom session is Created. + Return : + Redirects to user Dashoard +""" def createSession(username): try: session = Session.create(user=User.get(User.username == username)) @@ -290,6 +396,16 @@ def createSession(username): return bottle.redirect("/dashboard") +""" +login: method + This function is called whenever user log in to the app + Checks if the user entered the Right credentials for log in + Parameters: + None + Return : + Redirects to home if invalid credenial + Else Creates the session for the user +""" @app.post("/login") def login(): username = bottle.request.forms.get("username") @@ -303,6 +419,16 @@ def login(): return createSession(username) +""" +resgiter: method + This function is called whenever new user registers + New User is Created in the Data base and his credentials are stored + Checks if the user with same username already exisxts + Parameters: + None + Return : + Creates session for new user. +""" @app.post("/register") def register(): username = bottle.request.forms.get("username") @@ -316,6 +442,16 @@ def register(): return createSession(username) +""" +logout: method + Ends the session for the user + Deletes the session cookie + + Parameters: + None + Return : + Redirects to Home Page +""" @app.get("/logout") def logout(): Session.delete().where(Session.token == bottle.request.get_cookie("s_id")).execute() @@ -323,37 +459,63 @@ def logout(): return bottle.redirect("/home") -@app.post("/check//") -@login_required +""" +file_upload: method + This method is used to upload the submission to Question to the Server. + Parameters: + code: Contest Code + number : Question No of ehich solution is uploaded + Return : + "Wrong Answer!! : If solution is wrong + "Solved! Great Job! " : If solution is correct + + +""" +@app.post("/check//") # Send Date to url given as argument +@login_required # checks if user is Logged In def file_upload(code, number): try: contestProblem = ContestProblems.get( ContestProblems.contest == Contest.get(Contest.code == code), ContestProblems.question == Question.get(Question.q_no == int(number)), - ) + )# checks if Contest Problem Exists except: return bottle.abort(404, "no such contest problem") + # get the user details user = Session.get(Session.token == bottle.request.get_cookie("s_id")).user + # time of submisision time = datetime.datetime.now() - uploaded = bottle.request.files.get("upload").file.read() + + uploaded = bottle.request.files.get("upload").file.read() # read the uploaded File with open(os.path.join(question_dir, number, "output.txt"), "rb") as fl: expected = fl.read() expected = expected.strip() uploaded = uploaded.strip() - ans = uploaded == expected + ans = uploaded == expected #Answer is correct if uploaded is same as expected. + try: Submission.create( user=user, contestProblem=contestProblem, time=time, is_correct=ans - ) + )# Add Submission For User except: bottle.abort(500, "Error in inserting submission to database.") - if not ans: + + if not ans: # if Answer is Wrong return "Wrong Answer!!" else: return "Solved! Great Job! " -@app.error(404) +""" +error404: method + Handles Error + Parameter: + error : Error rturned the App + Return : + Redirects to + +""" +@app.error(404) # Checks if app returns an error with error code as argument def error404(error): return template("error.html", errorcode=error.status_code, errorbody=error.body) From 495cc553ca4c7d7989729315f5a6a3f0b4717237 Mon Sep 17 00:00:00 2001 From: jatinkhemchandani Date: Fri, 24 May 2019 23:07:38 +0530 Subject: [PATCH 3/9] Remove Unnecessary Comments used in documentation --- server.py | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/server.py b/server.py index dc44c06..e91432a 100644 --- a/server.py +++ b/server.py @@ -21,6 +21,10 @@ class User(Model): password = CharField() class Meta: + """ + Class : Meta + define the database in the main class + """ database = db """ @@ -52,7 +56,6 @@ class Contest(Model): end_time = DateTimeField() class Meta: - #define the database in the main class database = db """ @@ -65,7 +68,6 @@ class Question(Model): author = ForeignKeyField(User) class Meta: - #define the database in the main class database = db """ @@ -81,7 +83,6 @@ class ContestProblems(Model): class Meta: database = db - #define the database in the main class indexes = ((("contest", "question"), True),) """ @@ -104,12 +105,11 @@ class Meta: #define the database in the main class indexes = ((("user", "time"), True),) +#Establish a Connection with Database +db.connect() -db.connect()# Establish a Connection with Database - -db.create_tables([User, Session, Submission, ContestProblems, Contest, Question])# Create Tables with -#specied fields in Databse - +"""Create Tables with specied fields in Databse""" +db.create_tables([User, Session, Submission, ContestProblems, Contest, Question]) # dummy contest data practiceContest = Contest.get_or_create( @@ -149,7 +149,7 @@ class Meta: q6 = Question.get_or_create(q_no=6, author=test[0]) # Add Questions to contest -# Contest Problem Instance is created which is used to assign question to specific contests. +"""Contest Problem Instance is created which is used to assign question to specific contests.""" ContestProblems.get_or_create(contest=practiceContest[0], question=q1[0]) ContestProblems.get_or_create(contest=practiceContest[0], question=q2[0]) ContestProblems.get_or_create(contest=pastContest[0], question=q1[0]) @@ -219,8 +219,8 @@ def dashboard(): Return: Question Template """ -@app.get("/contest//")# Sets the base url as the argument. -@login_required# Checks if user is logged in or not +@app.get("/contest//") +@login_required def question(code, number): if ( not ContestProblems.select() @@ -471,27 +471,24 @@ def logout(): """ -@app.post("/check//") # Send Date to url given as argument -@login_required # checks if user is Logged In +@app.post("/check//") +@login_required def file_upload(code, number): try: contestProblem = ContestProblems.get( ContestProblems.contest == Contest.get(Contest.code == code), ContestProblems.question == Question.get(Question.q_no == int(number)), - )# checks if Contest Problem Exists + ) except: return bottle.abort(404, "no such contest problem") - # get the user details user = Session.get(Session.token == bottle.request.get_cookie("s_id")).user - # time of submisision time = datetime.datetime.now() - uploaded = bottle.request.files.get("upload").file.read() # read the uploaded File with open(os.path.join(question_dir, number, "output.txt"), "rb") as fl: expected = fl.read() expected = expected.strip() uploaded = uploaded.strip() - ans = uploaded == expected #Answer is correct if uploaded is same as expected. + ans = uploaded == expected try: Submission.create( From 758b0aa5d0e921667cf0cf61a8fdf09f2f27de01 Mon Sep 17 00:00:00 2001 From: jatinkhemchandani Date: Fri, 24 May 2019 23:38:08 +0530 Subject: [PATCH 4/9] Change format of Documentation --- server.py | 58 ++++++++++++++++++++++++++----------------------------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/server.py b/server.py index e91432a..1ae0865 100644 --- a/server.py +++ b/server.py @@ -13,7 +13,7 @@ db = SqliteDatabase(DATABASE_NAME) """ -User :Class +Class: User Defines username and password for individual user. """ class User(Model): @@ -28,7 +28,7 @@ class Meta: database = db """ -Session :Class +Class: Session Generates randam token for every section new Token is assigned to every User for every new session """ @@ -43,7 +43,7 @@ class Meta: database = db """ -Contest :Class +Class: Contest Each Contest instance contains:- Code Description of contest @@ -59,7 +59,7 @@ class Meta: database = db """ -Question :Class +Class: Question Each Question has a Question no and a author associated to it """ @@ -71,7 +71,7 @@ class Meta: database = db """ -ContestProblems : Class +Class: ContestProblems All contest problems belong to a Contest and are itself a question. contest defines the instance of Contest Class it belongs question defines the questions that belongs to that contest. @@ -86,7 +86,7 @@ class Meta: indexes = ((("contest", "question"), True),) """ -Submissision :class +Class: Submission Class defines the submission of solution of a Question Stores the information about: User that submits the Solution @@ -159,14 +159,13 @@ class Meta: ContestProblems.get_or_create(contest=futureContest[0], question=q5[0]) ContestProblems.get_or_create(contest=futureContest[0], question=q6[0]) + """ -login_required: method /decorator function +login_required: Function Extends the functainality of a funcion by checking log in condition. Checks if the user is logged in.if not redirect the user to home page with message 'Login Required' - parameters : Function on which decorator is applied - - + parameters : Function on which decorator is applied """ def login_required(function): def login_redirect(*args, **kwargs): @@ -178,7 +177,7 @@ def login_redirect(*args, **kwargs): """ -changePath: method +changePath: Function redirects to home page """ @app.route("/")# Sets the url that trigger following function @@ -187,7 +186,7 @@ def changePath(): """ -home : method +Function: home : Function redirects to Dashboard of the user """ @app.get("/home")# Sets the base url as the argument. @@ -197,7 +196,7 @@ def home(): return bottle.template("home.html", message="") """ -changePath: method +Function: changePath: Function redirects to Dashboard of the user """ @app.get("/dashboard")# Sets the base url as the argument. @@ -208,7 +207,7 @@ def dashboard(): """ -question: method +Function: question: Function Checks if the question and Contest it belongs does exists. If exists : it checks the current status of the contest And then returns the question state ment along with question numbers @@ -240,9 +239,8 @@ def question(code, number): ) - """ -contest: method +Function: contest: Function Checks if contest exists by validating the contest id. Checks the the current staus of code Parameters: @@ -263,7 +261,7 @@ def contest(code): """ -download: method +Function: download Downloads the question to local system Parameters: path :path to download from @@ -276,7 +274,7 @@ def download(path): """ -server_static: method +Function: server_static Static files for server Parameters: path :path of file @@ -289,7 +287,7 @@ def server_static(filepath): """ -contest_ranking: method +Function: contest_ranking Generates rankinks of users in a Contest i.e the Contest results Validates the Sumbission And Contest Checks the number of correct submissions for each user and Added to @@ -326,7 +324,7 @@ def contest_ranking(code): """ -rankings: method +Function: rankings Overall Ranking of the user over all the Contest. Parameters: None @@ -354,7 +352,7 @@ def rankings(): """ -loggedIn: method +Function: loggedIn Downloads the question to local system Parameters: None @@ -374,7 +372,7 @@ def logggedIn(): """ -createSession: method +Function: createSession Create a session for the user Set up cookie for The current session with seesion id ,token and expiry time @@ -397,7 +395,7 @@ def createSession(username): """ -login: method +Function: login This function is called whenever user log in to the app Checks if the user entered the Right credentials for log in Parameters: @@ -420,7 +418,7 @@ def login(): """ -resgiter: method +Function: resgiter This function is called whenever new user registers New User is Created in the Data base and his credentials are stored Checks if the user with same username already exisxts @@ -443,7 +441,7 @@ def register(): """ -logout: method +Function: logout Ends the session for the user Deletes the session cookie @@ -460,16 +458,14 @@ def logout(): """ -file_upload: method - This method is used to upload the submission to Question to the Server. +Function: file_upload + This Function is used to upload the submission to Question to the Server. Parameters: code: Contest Code number : Question No of ehich solution is uploaded Return : "Wrong Answer!! : If solution is wrong - "Solved! Great Job! " : If solution is correct - - + "Solved! Great Job! " : If solution is correct """ @app.post("/check//") @login_required @@ -504,7 +500,7 @@ def file_upload(code, number): """ -error404: method +Function: error404 Handles Error Parameter: error : Error rturned the App From 3c88eb6703aa452d7cca44404e3dc8da3338d181 Mon Sep 17 00:00:00 2001 From: jatinkhemchandani Date: Sat, 25 May 2019 00:01:54 +0530 Subject: [PATCH 5/9] Remove Typo in Documentation --- server.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server.py b/server.py index 1ae0865..d4017f8 100644 --- a/server.py +++ b/server.py @@ -161,7 +161,7 @@ class Meta: """ -login_required: Function +Function: login_required Extends the functainality of a funcion by checking log in condition. Checks if the user is logged in.if not redirect the user to home page with message 'Login Required' @@ -177,7 +177,7 @@ def login_redirect(*args, **kwargs): """ -changePath: Function +Function: changePath redirects to home page """ @app.route("/")# Sets the url that trigger following function @@ -186,7 +186,7 @@ def changePath(): """ -Function: home : Function +Function: home redirects to Dashboard of the user """ @app.get("/home")# Sets the base url as the argument. @@ -196,7 +196,7 @@ def home(): return bottle.template("home.html", message="") """ -Function: changePath: Function +Function: dashboard redirects to Dashboard of the user """ @app.get("/dashboard")# Sets the base url as the argument. @@ -207,7 +207,7 @@ def dashboard(): """ -Function: question: Function +Function: question Checks if the question and Contest it belongs does exists. If exists : it checks the current status of the contest And then returns the question state ment along with question numbers From d83a3555b10edf5d20e7d690f5130b271c7e3f19 Mon Sep 17 00:00:00 2001 From: jatinkhemchandani Date: Sat, 25 May 2019 00:11:04 +0530 Subject: [PATCH 6/9] Create Documentation using Natural Docs --- Docs/Comments.txt | 75 +++++++++ Docs/Languages.txt | 95 +++++++++++ Docs/Project.txt | 129 +++++++++++++++ Docs/Working Data/CodeDB.nd | Bin 0 -> 114688 bytes Docs/Working Data/Comments.nd | Bin 0 -> 4310 bytes Docs/Working Data/Files.nd | Bin 0 -> 3263 bytes Docs/Working Data/Languages.nd | Bin 0 -> 2221 bytes Docs/Working Data/Output/BuildState.nd | Bin 0 -> 95 bytes Docs/Working Data/Output/Config.nd | Bin 0 -> 157 bytes Docs/Working Data/Parser.nd | Bin 0 -> 525 bytes Docs/Working Data/Project.nd | Bin 0 -> 114 bytes Docs/Working Data/SearchIndex.nd | Bin 0 -> 343 bytes Docs/classes/Python/Contest-Summary.js | 1 + .../classes/Python/Contest-SummaryToolTips.js | 1 + Docs/classes/Python/Contest-ToolTips.js | 1 + Docs/classes/Python/Contest.html | 17 ++ .../classes/Python/ContestProblems-Summary.js | 1 + .../Python/ContestProblems-SummaryToolTips.js | 1 + .../Python/ContestProblems-ToolTips.js | 1 + Docs/classes/Python/ContestProblems.html | 17 ++ Docs/classes/Python/Question-Summary.js | 1 + .../Python/Question-SummaryToolTips.js | 1 + Docs/classes/Python/Question-ToolTips.js | 1 + Docs/classes/Python/Question.html | 17 ++ Docs/classes/Python/Session-Summary.js | 1 + .../classes/Python/Session-SummaryToolTips.js | 1 + Docs/classes/Python/Session-ToolTips.js | 1 + Docs/classes/Python/Session.html | 17 ++ Docs/classes/Python/Submission-Summary.js | 1 + .../Python/Submission-SummaryToolTips.js | 1 + Docs/classes/Python/Submission-ToolTips.js | 1 + Docs/classes/Python/Submission.html | 120 ++++++++++++++ Docs/classes/Python/User-Summary.js | 1 + Docs/classes/Python/User-SummaryToolTips.js | 1 + Docs/classes/Python/User-ToolTips.js | 1 + Docs/classes/Python/User.html | 17 ++ Docs/files/server-py-Summary.js | 1 + Docs/files/server-py-SummaryToolTips.js | 1 + Docs/files/server-py-ToolTips.js | 1 + Docs/files/server-py.html | 150 ++++++++++++++++++ Docs/index.html | 9 ++ Docs/menu/classes.js | 1 + Docs/menu/files.js | 1 + Docs/menu/tabs.js | 1 + Docs/other/home.html | 13 ++ Docs/search/index.js | 1 + Docs/search/keywords/006300680061.js | 1 + Docs/search/keywords/0063006f006e.js | 1 + Docs/search/keywords/006300720065.js | 1 + Docs/search/keywords/006400610073.js | 1 + Docs/search/keywords/0064006f0077.js | 1 + Docs/search/keywords/006500720072.js | 1 + Docs/search/keywords/00660069006c.js | 1 + Docs/search/keywords/00660075006e.js | 1 + Docs/search/keywords/0068006f006d.js | 1 + Docs/search/keywords/006c006f0067.js | 1 + Docs/search/keywords/007100750065.js | 1 + Docs/search/keywords/00720061006e.js | 1 + Docs/search/keywords/007200650073.js | 1 + Docs/search/keywords/007300650072.js | 1 + Docs/search/keywords/007300650073.js | 1 + Docs/search/keywords/007300750062.js | 1 + Docs/search/keywords/007500730065.js | 1 + Docs/styles/Default/Default.css | 12 ++ .../Default/images/menu-folder-arrow.png | Bin 0 -> 135 bytes Docs/styles/Default/images/menu-loading.gif | Bin 0 -> 2087 bytes .../Default/images/menu-tab-classes.png | Bin 0 -> 175 bytes .../Default/images/menu-tab-database.png | Bin 0 -> 156 bytes Docs/styles/Default/images/menu-tab-files.png | Bin 0 -> 149 bytes Docs/styles/Default/images/search-class.png | Bin 0 -> 185 bytes Docs/styles/Default/images/search-parent.png | Bin 0 -> 169 bytes Docs/styles/Default/images/search.png | Bin 0 -> 344 bytes .../styles/Default/images/summary-loading.gif | Bin 0 -> 3081 bytes Docs/styles/Default/images/transparent.gif | Bin 0 -> 42 bytes Docs/styles/DefaultJS/NDContentPage.js | 12 ++ Docs/styles/DefaultJS/NDCore.js | 12 ++ Docs/styles/DefaultJS/NDFramePage.js | 17 ++ Docs/styles/DefaultJS/NDMenu.js | 12 ++ Docs/styles/DefaultJS/NDSearch.js | 12 ++ Docs/styles/DefaultJS/NDSummary.js | 12 ++ Docs/styles/main.css | 1 + Docs/styles/main.js | 1 + 82 files changed, 809 insertions(+) create mode 100644 Docs/Comments.txt create mode 100644 Docs/Languages.txt create mode 100644 Docs/Project.txt create mode 100644 Docs/Working Data/CodeDB.nd create mode 100644 Docs/Working Data/Comments.nd create mode 100644 Docs/Working Data/Files.nd create mode 100644 Docs/Working Data/Languages.nd create mode 100644 Docs/Working Data/Output/BuildState.nd create mode 100644 Docs/Working Data/Output/Config.nd create mode 100644 Docs/Working Data/Parser.nd create mode 100644 Docs/Working Data/Project.nd create mode 100644 Docs/Working Data/SearchIndex.nd create mode 100644 Docs/classes/Python/Contest-Summary.js create mode 100644 Docs/classes/Python/Contest-SummaryToolTips.js create mode 100644 Docs/classes/Python/Contest-ToolTips.js create mode 100644 Docs/classes/Python/Contest.html create mode 100644 Docs/classes/Python/ContestProblems-Summary.js create mode 100644 Docs/classes/Python/ContestProblems-SummaryToolTips.js create mode 100644 Docs/classes/Python/ContestProblems-ToolTips.js create mode 100644 Docs/classes/Python/ContestProblems.html create mode 100644 Docs/classes/Python/Question-Summary.js create mode 100644 Docs/classes/Python/Question-SummaryToolTips.js create mode 100644 Docs/classes/Python/Question-ToolTips.js create mode 100644 Docs/classes/Python/Question.html create mode 100644 Docs/classes/Python/Session-Summary.js create mode 100644 Docs/classes/Python/Session-SummaryToolTips.js create mode 100644 Docs/classes/Python/Session-ToolTips.js create mode 100644 Docs/classes/Python/Session.html create mode 100644 Docs/classes/Python/Submission-Summary.js create mode 100644 Docs/classes/Python/Submission-SummaryToolTips.js create mode 100644 Docs/classes/Python/Submission-ToolTips.js create mode 100644 Docs/classes/Python/Submission.html create mode 100644 Docs/classes/Python/User-Summary.js create mode 100644 Docs/classes/Python/User-SummaryToolTips.js create mode 100644 Docs/classes/Python/User-ToolTips.js create mode 100644 Docs/classes/Python/User.html create mode 100644 Docs/files/server-py-Summary.js create mode 100644 Docs/files/server-py-SummaryToolTips.js create mode 100644 Docs/files/server-py-ToolTips.js create mode 100644 Docs/files/server-py.html create mode 100644 Docs/index.html create mode 100644 Docs/menu/classes.js create mode 100644 Docs/menu/files.js create mode 100644 Docs/menu/tabs.js create mode 100644 Docs/other/home.html create mode 100644 Docs/search/index.js create mode 100644 Docs/search/keywords/006300680061.js create mode 100644 Docs/search/keywords/0063006f006e.js create mode 100644 Docs/search/keywords/006300720065.js create mode 100644 Docs/search/keywords/006400610073.js create mode 100644 Docs/search/keywords/0064006f0077.js create mode 100644 Docs/search/keywords/006500720072.js create mode 100644 Docs/search/keywords/00660069006c.js create mode 100644 Docs/search/keywords/00660075006e.js create mode 100644 Docs/search/keywords/0068006f006d.js create mode 100644 Docs/search/keywords/006c006f0067.js create mode 100644 Docs/search/keywords/007100750065.js create mode 100644 Docs/search/keywords/00720061006e.js create mode 100644 Docs/search/keywords/007200650073.js create mode 100644 Docs/search/keywords/007300650072.js create mode 100644 Docs/search/keywords/007300650073.js create mode 100644 Docs/search/keywords/007300750062.js create mode 100644 Docs/search/keywords/007500730065.js create mode 100644 Docs/styles/Default/Default.css create mode 100644 Docs/styles/Default/images/menu-folder-arrow.png create mode 100644 Docs/styles/Default/images/menu-loading.gif create mode 100644 Docs/styles/Default/images/menu-tab-classes.png create mode 100644 Docs/styles/Default/images/menu-tab-database.png create mode 100644 Docs/styles/Default/images/menu-tab-files.png create mode 100644 Docs/styles/Default/images/search-class.png create mode 100644 Docs/styles/Default/images/search-parent.png create mode 100644 Docs/styles/Default/images/search.png create mode 100644 Docs/styles/Default/images/summary-loading.gif create mode 100644 Docs/styles/Default/images/transparent.gif create mode 100644 Docs/styles/DefaultJS/NDContentPage.js create mode 100644 Docs/styles/DefaultJS/NDCore.js create mode 100644 Docs/styles/DefaultJS/NDFramePage.js create mode 100644 Docs/styles/DefaultJS/NDMenu.js create mode 100644 Docs/styles/DefaultJS/NDSearch.js create mode 100644 Docs/styles/DefaultJS/NDSummary.js create mode 100644 Docs/styles/main.css create mode 100644 Docs/styles/main.js diff --git a/Docs/Comments.txt b/Docs/Comments.txt new file mode 100644 index 0000000..bea53f9 --- /dev/null +++ b/Docs/Comments.txt @@ -0,0 +1,75 @@ +Format: 2.0.2 + +# This is the Natural Docs comments file for this project. If you change +# anything here, it will apply to THIS PROJECT ONLY. You can edit the version +# in Natural Docs' Config folder to make the changes apply to all projects, +# but it's recommended that you edit this version instead. + + +# Ignored Keywords +# ------------------------------------------------------------------------ + +# If you'd like to prevent keywords from being recognized by Natural Docs, +# you can do it like this: +# +# Ignore Keywords: +# [keyword] +# [keyword] +# ... + + +# Comment Types +# ------------------------------------------------------------------------ + +# Each Natural Docs comment has a corresponding type which determine its +# behavior. You can define your own here or override the settings of the +# existing ones. +# +# Comment Type: [name] +# Alter Comment Type: [name] +# Creates a new comment type or changes an existing one. +# +# Display Name: [name] +# Plural Display Name: [name] +# The singular and plural name of the comment type as it should appear in +# the output. +# +# Simple Identifier: [name] +# The name of the comment type using only the letters A to Z. No spaces, +# numbers, symbols, or Unicode allowed. Defaults to the comment type name +# minus any unacceptable characters. This is used to generate things like +# CSS class names. +# +# Scope: [normal|start|end|always global] +# How the comment affects scope. Defaults to normal. +# normal - The comment stays within the current scope. +# start - The comment starts a new scope for all the comments +# beneath it, like class comments. +# end - The comment resets the scope back to global for all the +# comments beneath it, like section comments. +# always global - The comment is defined as a global symbol, but does not +# change the scope for any other comments. +# +# Flags: [flag], [flag], ... +# A combination of settings that apply to the comment type. +# Code, File, or Documentation +# Whether it's used to describe a code element, a file, or is a +# standalone documentation comment. Defaults to Code. +# Variable Type +# Whether it describes a code element that can be used as a variable's +# type. +# Class Hierarchy or Database Hierarchy +# Whether it describes a code element that should be included in the +# class or database hierarchy. Requires Scope: Start. +# Enum +# Whether it describes an enum. +# +# Keywords: +# [keyword] +# [keyword], [plural keyword] +# ... +# A list of the comment type's keywords. Each line after the heading is +# the keyword and optionally its plural form for list comments. You can +# reuse existing keywords to change their definition. When using +# "Alter Comment Type", these keywords are added to the existing ones +# rather than replacing them. diff --git a/Docs/Languages.txt b/Docs/Languages.txt new file mode 100644 index 0000000..232d50d --- /dev/null +++ b/Docs/Languages.txt @@ -0,0 +1,95 @@ +Format: 2.0.2 + +# This is the Natural Docs languages file for this project. If you change +# anything here, it will apply to THIS PROJECT ONLY. You can edit the version +# in Natural Docs' Config folder to make the changes apply to all projects, +# but it's recommended that you edit this version instead. + + +# Ignored Extensions +# ------------------------------------------------------------------------ + +# If you'd like to prevent certain file extensions from being scanned by +# Natural Docs, you can do it like this: +# +# Ignore Extensions: [extension] [extension] ... + + +# Languages +# ------------------------------------------------------------------------ + +# These settings define the languages Natural Docs knows how to parse. You +# can define your own here or override the settings of the existing ones. +# Note that all lists are space separated so that commas can be used as +# values. +# +# Language: [name] +# Alter Language: [name] +# Defines a new language or alters an existing one. Its name can use any +# characters. If any of the properties below have an add/replace form, you +# must use that when using Alter Language. +# +# The language Shebang Script is special. It's entry is only used for +# extensions, and files with those extensions have their shebang (#!) lines +# read to determine the real language of the file. Extensionless files are +# always treated this way. +# +# The language Text File is also special. It's treated as one big comment +# so you can put Natural Docs content in them without special symbols. +# +# Extensions: [extension] [extension] ... +# [Add/Replace] Extensions: [extension] [extension] ... +# Defines the file extensions of the language's source files. +# +# Shebang Strings: [string] [string] ... +# [Add/Replace] Shebang Strings: [string] [string] ... +# Defines a list of strings that can appear in the shebang (#!) line to +# designate that it's part of the language. +# +# Simple Identifier: [name] +# The name of the language using only the letters A to Z. No spaces, +# numbers, symbols, or Unicode allowed. Defaults to the language name +# minus any unacceptable characters. This is used to generate things like +# CSS class names. +# +# Aliases: [alias] [alias] ... +# [Add/Replace] Aliases: [alias] [alias] ... +# Defines alternate names for the language that can be used to start a code +# block. +# +# +# Properties for Basic Language Support Only +# ------------------------------------------------------------------------ +# If you're adding your own language to Natural Docs you must define these. +# +# Line Comments: [symbol] [symbol] ... +# Defines a space-separated list of symbols that are used for line comments, +# if any. +# +# Block Comments: [opening sym] [closing sym] [opening sym] [closing sym] ... +# Defines a space-separated list of symbol pairs that are used for block +# comments, if any. +# +# Member Operator: [symbol] +# Defines the default member operator symbol. The default is a dot. +# +# Line Extender: [symbol] +# Defines the symbol that allows a prototype to span multiple lines if +# normally a line break would end it. +# +# Enum Values: [global|under type|under parent] +# Defines how enum values are referenced. The default is global. +# global - Values are always global, referenced as 'value'. +# under type - Values are under the enum type, referenced as +# 'class.enum.value'. +# under parent - Values are under the enum's parent, referenced as +# 'class.value'. +# +# Case Sensitive: [yes|no] +# Defines whether the language's identifiers are case sensitive. The +# default is yes. +# +# [Comment Type] Prototype Enders: [symbol] [symbol] ... +# When defined, Natural Docs will attempt to get a prototype from the code +# immediately following the comment type. It stops when it reaches one of +# these symbols. Use \n for line breaks. diff --git a/Docs/Project.txt b/Docs/Project.txt new file mode 100644 index 0000000..53a2999 --- /dev/null +++ b/Docs/Project.txt @@ -0,0 +1,129 @@ +Format: 2.0.2 + +# This is the file you use to provide information about your project. It can +# also be used to specify input and output settings so you don't have to +# include them on the command line. + + +# Project Information +# ------------------------------------------------------------------------ + +# This is where you specify general information about your project. +# +# Title: [text] +# The name of your project. (R) and (TM) will be converted to their +# respective symbols. +# +# Subtitle: [text] +# A subtitle for your project. +# +# Copyright: [text] +# The copyright notice for your project. (C) will be converted to the +# copyright symbol. +# +# Timestamp: [text] +# Text explaining when the documentation was generated. The following +# substitutions are performed: +# m - Single digit month, when possible. January is "1". +# mm - Always double digit month. January is "01". +# mon - Short month word. January is "Jan". +# month - Long month word. January is "January". +# d - Single digit day, when possible. 1 is "1". +# dd - Always double digit day. 1 is "01". +# day - Day with text extension. 1 is "1st". +# yy - Double digit year. 2017 is "17". +# yyyy - Four digit year. 2017 is "2017". +# year - Four digit year. 2017 is "2017". +# +# Style: [style] +# The style to apply to the generated documentation. It can be the name of +# a CSS file in the project configuration folder or a subfolder that +# contains Style.txt. Do not include ".css" if using a CSS file. + + +# Source Code +# ------------------------------------------------------------------------ + +Source Folder: ../PyJudge + + + +# This is where you specify what files and folders Natural Docs should be +# scanning. If you use any of these options on the command line, this entire +# section is ignored except for names and numbers. +# +# All paths are relative to the project configuration folder, which lets this +# file remain portable across computers and not cause problems in version +# control systems. You can enter absolute paths and they will be converted +# automatically. +# +# Source Folder: [path] +# Name: [name] +# +# Specifies a folder which will be searched for source files. If you have +# more than one, add the Name property to set how it will show up in the +# menu. + + +# Source Filtering +# ------------------------------------------------------------------------ + +# If there are any subfolders in the source code that you would like Natural +# Docs to ignore, they can be specified here. If you use any of these options +# on the command line, this entire section is ignored. +# +# Ignore Source Folder: [path] +# Tells Natural Docs to skip this folder when scanning files. +# +# Ignore Source Folder Pattern: [pattern] +# Tells Natural Docs to skip all folder names which match this pattern when +# scanning files. ? matches a single character, * matches zero or more +# characters. It applies to the entire folder name, so "cli" will not +# match "client", although "cli*" will. +# +# The data folders of common version control systems (.git, .svn, .cvs, .hg) +# are ignored automatically. You do not have to specify them here. + + +# Generated Documentation +# ------------------------------------------------------------------------ + +HTML Output Folder: . + + +# This is where you specify what kind of documentation you want Natural Docs +# to build and where it should be put. If you use any of these options on the +# command line, this entire section is ignored except for secondary settings. +# +# All paths are relative to the project configuration folder, which lets this +# file remain portable across computers and not cause problems in version +# control systems. You can enter absolute paths and they will be converted +# automatically. +# +# You can override any of the project information settings under each entry, +# so if you have multiple output folders you can give them each different +# styles or subtitles. +# +# HTML Output Folder: [path] +# [Project Information] +# +# Generates HTML documentation in the specified folder. + + +# Global Settings +# ------------------------------------------------------------------------ + +# Other settings that apply to your entire project. Settings specified on the +# command line override the settings here. +# +# Tab Width: [width] +# The number of spaces tabs should be expanded to. +# +# Documented Only: [yes|no] +# Whether only documented code elements should appear in the output. +# Defaults to no. +# +# Auto Group: [yes|no] +# Whether groups should automatically apply to you code. Defaults to yes. + + diff --git a/Docs/Working Data/CodeDB.nd b/Docs/Working Data/CodeDB.nd new file mode 100644 index 0000000000000000000000000000000000000000..149233408336dc835f4a2882c26a6ee27370f71c GIT binary patch literal 114688 zcmeI5du$xXdBAsX@AmF^B!?759Yu!K(5gcclEpZ->Y7$m(IhR)mh~bX$4(J;dAH`^!sLZ_IAmmABip5@^`jwW@l#S@%z60=6TD7i)WqC<}04RW`+C?txwZ+?G)#l zrj5eCH^4vjDT61gF2L0j{=K}T+HKGMN>BdRwISWm*m(DP_kq$=rITG>DSE|$!Y2#M z1ug%(W;1_J?z7nsXU`e`W?VD+GnX^H`a0ZjeLnS}eEFVHz18EmRr~6!=Z5yxFt~R! z@-2kE$^X@^cTLJ$qE$AuG)n=ideq zapWa?#rAEt0;M+HFwRLO;FE7ZV3uzm(KjWDx)lUAfH>=Umz#|T?af&kQcg42l}t2W zhVqH{=E>IK!F+jSMBf^fEte^xJP)MXt?m}FFWhKMo@nw>9+&!(5v=dem)|m`xB3Nx zGi%nWeb#X=1BOM*U$w*goVtBxt{py@g3%67r$;31I6jfgYtkObmybh{`mQ3euyfX$ z-M)4Ip2exOJBw1`lh!`7e8-sn_^whS$n8P~_AErnV@GqM;K_INgZ_*~`qR$u-p!rV z_U&1MOxdXsXXYli-q4pXkB#Zq4532p65780C};TqwZr*D?0-RhI`2EHj%(Ey!4T|J zpbJ)5+Zm=1cM4Awrk*o+N>O1u#v~PE*8_T#%jkuQ=i9qt`DE)>mM>qN(OdIE#xwQM z_FXF!3Ow&t!Hg|zt}T0YP-f}bJ4IhgKzpZCIibMzPQ@pZ#ZR_od-CO(8GWl?h;i@x z_KxXIiFxmIV1VH1?T9*ArJa&X8rLX?qda-TB%fU9HOs3rx+Yi$>viZym#k*!iR-1k ztF(0c-f;}NyaIN6E8Sod%BoXJS)fRHL|9KsOr4UUU_`hwI??T*OPdXQ@)t_79BF$} z87z7Yr*dXagmv#-PLym{IZ^oJJGxA4$-4xWsDLENK!lY#6_84nC?FX=dA?|tZ!PQV z$^1ndMZR5~@)gmE{L)AsD}WIz>+eivh)?*8TSa6d+hV6|6NwU;OM@2S-g5H!a=ENO zal6obk(c-?L>Wr6C4zRTZc-`Rwgl_6%N9U!V7t!y@-g43-O*s9<5MB4+abdUQiqtc zmb==7ezIeJNm=czhqPu&fz-ez(KONH?p^TnTSLnP)jp`YRZ$8UzGQu5SUx4oPU%pZ zGJJ<2Yvf?)2t^zex}t6s6`r$K9M=gQ&y~Su$5M7AO%@b2`zRMV*@3v8tY-7&aVT+c zcZsr`+}`DM%w4G`x);1a)OhkyBVWFC7dlKL3(0mY1mlxsbjG2gHhQ zap&zav@OVU&9!CQk1NvF(@0buVv@4!5Pb%WU$A>1ew3dH=Ao==)vk89E2+Xe>pbhN zt=VpfMxo>5IA>StmTy;QDiu2j&e~V(dZ!XrR_sdXT(O@&*`l=?L>V{d-v?YF)8&d1^VuE*br z&d+5xWQo@kt$t=W~!0e4n-ShKl`;FepJTko)%=Y)LOu6r)5 zja5B6;PzEm;|q>)er6@|^Jz>}ky&9rm8K8-@*xjGD{Kbblet%L)dn(zjR!2v<-Q#@ zeK$xKjrZ6b7yY<}rSc62b|~YTxnj{W5H(a8R$xJmhn~o1(OzrRF^3D54?E4UV;D?x zOfVfcXcm*pe5U!uhy{<9>n@2pCBjvPC#Hzji>GzUYBY|)@q&q4rXnd#oj@s^oH`-N zpS)#~pQ?MXFTLd3>rDsNaCy~Ui3L4@sgFitnp|iuuQ>s(Kps+>U@A|^?AE@JGtJih zr6KLm(#6f=Lg5c36uxQ&wPnxptDx~v5ENDkLG3&~ry`V&HUry7NxyKaL<{5W_h?fb zKap%m9BRhCl3CK8!KNJQ8qx-rF3ukjO&LryrRJ^KuS_d2XJ`Nl0llfZVt|QXC9_L= z8f!RO9MZ;4-~G^CqK0FM8dhqse`e#kf}Qom40r=})^-t&V+2*-Ylb#xPE?zAhN(KW zgH7peK#?W0sC^XbckOs#Sex8_c>DDH&xsmNCTf^gJE-OS)zEgU(h#jQ-AZWTaS12f zM76Lu2I1oO@}@L$aPWXb9^7%kvcNe6w54DV)3y{fi8}!%Tm{{B++$#5T`vTyClyeb zE0GEmF$N&b-5P9W04F|v7M~D)DSAT2fu6EzV07=ps$#|9|Baecse$m|D1{YzqGWgk z>yBMT*f(_pQDf60oe)9>fSsm-9VBc~9A>Hl zgPfU%Y__kM!`j&P@$K<@#)^8eP#7zU?pH6sf9(uF^~5#@K6J1lBo#1-Z5?V~;MJQ_ z#;A#LZ?yn2j?z1>Jne{zU@gO=GtFV^#Rv6*6ObY^v~|!cFQ}{*9e55Q?{-Dvz7bRr zG%0{1LCN8O>i-|9*^m)tZ9~OWcA(^-b!byXABksyZk7hY<{~tv&1vEx=#}aTtuouv zGR;SG=5{qVtR2~A+dA5A5d4vZ;AiCk2zKz`q~uxv(x0i<(S(R$Q6mbDMqAiDS+QJj zKnDAqFwP3>I%HsU%e z>==srwOe~B*9eS~M`3ddy(@HqbQ~ThG}+#djLYY()TLJ%qdb zkcVi5u>G+8&(R{q&3%RPPsuzjYa^CY2nXuLEyD&AJQWk~4 zBlgOd5}7zzq_S`FDic-2%pA&PT8DKQlfG+xY7jJ|P{40ZhoO~TC}I*dzPlYq+}$zK7Vo8v7yp z4*OU3Pwem67uaXmC)r=JKV^TyKEU3`ev`e2ZLwcsKKn(s%pPNx*aL6_eTV=NAOb{y z2oM1xKm>>Y5g-CYfC#*<2;{S{*li9CNw-{`vkQ ze?Vi;vHxUWXJ28TXV0*w*`KiwvEOIE&ECseY=f<_3VW2DXY=eHb~_tqqi_R#hyW2F z0z`la5CI}U1c(3;AOb{y2)wol6mu}4*G-txD_^;+dC2kgtn?YC zVMt%b%w)_Q99vQI|Hm{q`~TnU-`O|VKf(&YXV_n}kF!5#A7+2V{($`+oB(()yT%@8 zSD43Y%z`rjfA`uJG1Z<35CI}U1c(3;AOb{y2oM1xKm>@u%SFJJ9r{r}z%Y3$wXtL!w}&py%nP3Exa-VgPD3{L-V^!~8-S@vtapJHERKhN^LpJx;7 z+w3X!gO`gEFu{M755pFvcmC8z6yAw$}-4f`ot?# z5>-|2+sGx0&6bQ2RWSqoQR_2#W3Y&?6u|fY=h-QZ{R{gW_7V15aN7Uva7iB`Km>>Y z5g-CYfCvx)B0vO)01+SpL?A)nV7^<^%LUk1FT+dYGvalpW^N7NdO8g6*~Tb68KvTK z9pW<4ec29i*(lEF5SNSMG9BU!8CTXJZUBGRFaXsw;LWFSHXsKM?*Hf6r#1Fp>|5+> z?8|Wa|I_TbL<7l71c(3;AOb{y2oM1xKm>>Y5g-CYfC#*L2t=>-i(dbiiC+JgiC+Jg ziC+JgiC_N*KLXH;rXlD5pV8nq|6hhRfUm(Sz~^cH|LPGd)r1HT0U|&IhyW2F0z`la z5CI}U1c*SIfSE1ApQ}&L|KTnFVqG8`&Hr=J{NI50|0U=DPw#mDe>!KnA_7E!2oM1x zKm>>Y5g-CYfCvx)B0vOgAOU>6f%vIGKK7ZhFBki=vCoKo8Pgaj#^?W^)!6^C@3Zf~ zUjX~k9XF1*+O>+D(fCH6V?!>Y z5g-CYfCyY?0<`~soq>Y5g-CYfCvzQ>r8;=|JNBf6-NY!01+SpM1Tko0U|&IhyW2F0z}{j5TN=0 z4S-HX5&>Y5xC9-df0DhCfm~37W)tO5A4(IBkXb$J>@VPgK16^B z5CI}U1c(3;AOb{y2oM1xKm>@u4I#kHENtbsPXfGgAeYsS6nC5g=+0)f(V{v4P%^R_ zO!VbJfl>x9q7{IGp4A46c-}zn|39U%ud+|DFS2jLDS#i`kOoqrM1Tko0U|&IhyW2F z0z`la5CI}U1c*RP0C)1+s{rPJaYWy-29WDEMs>9WkS!VT(*n5yV4z{A~AX*SiZ(7EYOkTrK-4<3|wj`uIGt-aVp?Uh}S5ts{37^+KUAsuzoz zu4f9muCGVGs5sF$Ia{+Umjmvs@UUic6~QgH$|KC&3Hh>J_uSQhS3Nu6_EjecgJYbZ zS&9678WUAyR+vwv>HD@D@*uRrX23m}dqv8P&p_so%H_TtHhnip7mfGWd<}26uvEU` zgtd0f+~(S{?FXWUD#MCbwRz}?d=~AsMjdmwVENXX9YWe^jtQpY2F+q}na?y=n#IqF zjQJ%|r$o5Q@Wd3+dhxVQS&hcARXd!xWh#==)CrWr$*B{P{K;D;`Kh|M>bOh3z20jYoTxVK3{!P#2bBXpA$8lOw=%~c2LXttD)^yr6F2rx|Ps!T&wPco2V8R#~}Ct8eiU&M$Q4N1bJ}B z1)SOBUgjex=EA&Lk@Ceo&yNa-H>IS05rbRj-ga~Ak z&s#c)nZ7KU1?_{NH}iS0AuvWr*^mNunhJK1utjm0sR|5oW*)NHzG4n*W825K$L|>{ z>cv7~tSGu)y#W8UGXT|_ty=+ftoDlILf?v=XAu89616Yz>P;zQ)Wo>AS^ybG=^b~) z^Vckq$XbR+XPVQazznW?NdO`Do7EuI7fdBin3SN81g8 zKavpqZ2C8@ApMzo9Zd-S@|8EDpT0(;E$p7GSS~mqvwR!IS%F=EWpg3%w@L<#;`WhT4>E59}x{2Ni--TqS_N( zLYEfl7!raWGnl>&^cBX|b9PYiorW@75x`iN;VwVqAsQiU|2+IdixfBa70N#)^R%pu zsEVd>EN5)(&mfAW*2NAeqWLDEIBmN&bhTiFeQ1TX1~R)0a~iP4+`eM_n>+x6h@G=* zZ}3GC2Zj=4?5w&{!ZMk#)$O}5bs&GtjzC`dQY4nBUCO>izow5WVrCBIGOfcpj7i_M zJ~arMQ7GWIro+%mFNlqIATk$qVmPL8VeTcQ+kh5tcz#uYabU1?#i=%}I>$u9h`jW> zWQ~zqR9*C9er8_|=l=!mm$lx@-QO?$RsK2i1KE#deg^`s!{=Ig|FBlxKEFNl;B8{e zS>8G31W1d}yNUs&&<*T5t$H2wVFM<_s1O2-8eIyb3mhAbPJ>IBBHK7^!ru6jvs!~G zI9x)gW7VMyP(&Ex;2%WS#kwzuLqrVa_kk*HfOf<+0=1R3titf4voeVr z=U{p*rrn?#H(|42z=aPnBt;K#EI=-v5zOY-?FqF6qs|x|h`aE<7&^7Q&GAOw~#XamOFcK+8 z!zFkUlaKQbJ0E4D7Bl54!;T_Q9y@}rL#c^%w5auwWmPOv##IHH%2P7?_0xd$$+x6L)RQ2orlGX=3FRYbm-3=%&V1fE?DqBWnkX;Vu~8co2FFmX_O;Vf7|x*5QG9 zD|V4_f4BgP$MTg%Vs%^H9IXi9{c_b43yJ2+iFv+!{A?WR3$ux4dZt>Hqr^I_wo7q^ z%|;!Dn~=rBk*(%4?G^H{=73TxK<<#{n3%suH{iU{N@WKvtil)_*1T{j3r1&fCuA$0 zSVCs=9nSJ^#XdUllBieZDj@GTM((a)Ws6AM|CEOx%DxgLS!oyb_ zd@gXnD-)y)A+8GZY4Hszj!D~^7Ttdz-jCMr<;*VuOxAbm1Qw1J5w*b$5F9|H+BBh( zB+;c(n5nCh$@D?Qw%!Y!%2uiMcyo8BQjJCp0PM%;ZWH|A;a7R_6(7cf@gtiAIn7lm z7QD)h$8c4sT#S5CgO``3?1Ugxp;ISzi9t1N0%MZ&RfMTLC9_vA0Q2pAJ;U16*6FRg zwOP^Q+_t;NX|K@({PzBUvU_qX755dyj0?0H%rTl%mB7IPcA^&%aqZ1jxwk5;XWPWe z?an=|>#Tebxf%+f-oH9)mKaS%Jf_uxyD}fsYTdnL_GsS)q2T;KTllWl^NsFL6#oxA z^dSO7fCvx)B0vO)z|BWst1yHMN-$;Wu%Kl7zUSZhraNKyc|R;G;5=y_gW6N1X)e;h zcu_|9cqT8}RhWT|hj@&i+$+FACO@1QljGcK3D!_x0TpnFtqL`s#5GA+O%NNeGKE|WX&=Ra zxleoN7A|lkz96QfI~Lw>G~V&7ArQV8ZMpJu9=Eb!UO9dY6ta*slRc(>4o<^ zg6pNQv=nUE{@57gbS7~!M6IWCnHG+DT(PTT{4}mi^9Q`;u_$8qZHZ$Wgd;x1B9t-O z>Z#zN))#qnF`-|3o?c9(F%$lhS=K*`^Z1`Wa8NtAHU9WRQ$l?YCe#-elHqU~aWefH~afKE)a$z?o-f*>G-88^sS#WeZb*fqvAa~?& zR~#?p_IMqh(CVf*M12*Ol#^5Vv;<^5f_VQ8m%3Ed#ggX>?z^hguzvlTZD?XWK*`ut No{~AJ{~>6`{{wdDbjAPx literal 0 HcmV?d00001 diff --git a/Docs/Working Data/Comments.nd b/Docs/Working Data/Comments.nd new file mode 100644 index 0000000000000000000000000000000000000000..cc29629cb8823b663f2b56e9c1e2ce7fb84a1acf GIT binary patch literal 4310 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 DDH$|) literal 0 HcmV?d00001 diff --git a/Docs/Working Data/Parser.nd b/Docs/Working Data/Parser.nd new file mode 100644 index 0000000000000000000000000000000000000000..6472d74b43da1b195c1896f231993d1ba4a95f2e GIT binary patch literal 525 zcmYL`&27Ul424PksqK+x@*;P3aSSA7!1l(Dq@q@6frExq+ zqIY(6ybvH8V)M-I_v4enI-y?Rskwxhb|WvV7*1`tf|pR}1y|;ZaNV?7vfLXo+76nN zP|NC1jEfN&{dnR!w5RS$Nf=iXqElkDstAjwD=x9bWz)u65HjN*R0>sg6_Y-n!o_We zk4JMid44<5ZVvsUx1Z8SZ~y3RW}IuAiRQ?IK?aPbV+^Lds^p||(*Y9(8;S95Z>sg6 zrY4;}TaG&0WJ0pBB$qoTTWY7bJtgd&nws~PNNmpHh*(=$MV+&fO4Vw$0(=Ht5m?<3 I{4War0I{N}g#Z8m literal 0 HcmV?d00001 diff --git a/Docs/Working Data/Project.nd b/Docs/Working Data/Project.nd new file mode 100644 index 0000000000000000000000000000000000000000..8e6fbd708bcd5c251a10661c8eeb26f9d31a555c GIT binary patch literal 114 zcmX@<=W;eFGj9*8k)DB`5eowlFf#H6=a&{Grz*JR=cJ?-N$F?g=cejsW$Wh`q~?L7 pQuPBWy-HKkQyGEEg*-xheH8plOA1O$pgP2{=y1tTE(R%Q007^QBJThI literal 0 HcmV?d00001 diff --git a/Docs/Working Data/SearchIndex.nd b/Docs/Working Data/SearchIndex.nd new file mode 100644 index 0000000000000000000000000000000000000000..a1968e0736498fcf706f6b27c8e7827e50093f24 GIT binary patch literal 343 zcmXxgTMmLS5Cu^5it+t^t%4ZV;J14~C_;iXmJm1R2K;bO&aK18$;?eVP211)^1YSy zJB*`q6r*iSF9?DT8q=`vE2Op_NDmcCrMX&3B|KZh8SbT-Let)O-cX^kcdn1rMk?*p zK`J3F63&ek3j1K5C}fGh=TtHwZ)>i1_d;f0%nK#&a?DEwm-zi_$%NGTf7nV-aQ}bU TOHatlit|SW
Contest
Each Contest instance contains:- Code Description of contest Contest start time and End Time
"}); \ No newline at end of file diff --git a/Docs/classes/Python/Contest-ToolTips.js b/Docs/classes/Python/Contest-ToolTips.js new file mode 100644 index 0000000..59992a1 --- /dev/null +++ b/Docs/classes/Python/Contest-ToolTips.js @@ -0,0 +1 @@ +NDContentPage.OnToolTipsLoaded({}); \ No newline at end of file diff --git a/Docs/classes/Python/Contest.html b/Docs/classes/Python/Contest.html new file mode 100644 index 0000000..5c7e2f6 --- /dev/null +++ b/Docs/classes/Python/Contest.html @@ -0,0 +1,17 @@ + + +Contest + + + + + + + +
+
Contest
+
Model
Contest
+

Each Contest instance contains:- Code Description of contest Contest start time and End Time

+
+ + \ No newline at end of file diff --git a/Docs/classes/Python/ContestProblems-Summary.js b/Docs/classes/Python/ContestProblems-Summary.js new file mode 100644 index 0000000..53de979 --- /dev/null +++ b/Docs/classes/Python/ContestProblems-Summary.js @@ -0,0 +1 @@ +NDFramePage.OnPageTitleLoaded("PythonClass:ContestProblems","ContestProblems");NDSummary.OnSummaryLoaded("PythonClass:ContestProblems",[["Python","Python"]],[["Classes","Class"]],[[5,0,0,"ContestProblems"]]); \ No newline at end of file diff --git a/Docs/classes/Python/ContestProblems-SummaryToolTips.js b/Docs/classes/Python/ContestProblems-SummaryToolTips.js new file mode 100644 index 0000000..60824bc --- /dev/null +++ b/Docs/classes/Python/ContestProblems-SummaryToolTips.js @@ -0,0 +1 @@ +NDSummary.OnToolTipsLoaded("PythonClass:ContestProblems",{5:"
ContestProblems
All contest problems belong to a Contest and are itself a question.  contest defines the instance of Contest Class it belongs question defines the questions that belongs to that contest.
"}); \ No newline at end of file diff --git a/Docs/classes/Python/ContestProblems-ToolTips.js b/Docs/classes/Python/ContestProblems-ToolTips.js new file mode 100644 index 0000000..59992a1 --- /dev/null +++ b/Docs/classes/Python/ContestProblems-ToolTips.js @@ -0,0 +1 @@ +NDContentPage.OnToolTipsLoaded({}); \ No newline at end of file diff --git a/Docs/classes/Python/ContestProblems.html b/Docs/classes/Python/ContestProblems.html new file mode 100644 index 0000000..885db6e --- /dev/null +++ b/Docs/classes/Python/ContestProblems.html @@ -0,0 +1,17 @@ + + +ContestProblems + + + + + + + +
+
ContestProblems
+
Model
ContestProblems
+

All contest problems belong to a Contest and are itself a question.  contest defines the instance of Contest Class it belongs question defines the questions that belongs to that contest.

+
+ + \ No newline at end of file diff --git a/Docs/classes/Python/Question-Summary.js b/Docs/classes/Python/Question-Summary.js new file mode 100644 index 0000000..f3890c7 --- /dev/null +++ b/Docs/classes/Python/Question-Summary.js @@ -0,0 +1 @@ +NDFramePage.OnPageTitleLoaded("PythonClass:Question","Question");NDSummary.OnSummaryLoaded("PythonClass:Question",[["Python","Python"]],[["Classes","Class"]],[[4,0,0,"Question"]]); \ No newline at end of file diff --git a/Docs/classes/Python/Question-SummaryToolTips.js b/Docs/classes/Python/Question-SummaryToolTips.js new file mode 100644 index 0000000..610f29e --- /dev/null +++ b/Docs/classes/Python/Question-SummaryToolTips.js @@ -0,0 +1 @@ +NDSummary.OnToolTipsLoaded("PythonClass:Question",{4:"
Question
Each Question has a Question no and a author associated to it
"}); \ No newline at end of file diff --git a/Docs/classes/Python/Question-ToolTips.js b/Docs/classes/Python/Question-ToolTips.js new file mode 100644 index 0000000..59992a1 --- /dev/null +++ b/Docs/classes/Python/Question-ToolTips.js @@ -0,0 +1 @@ +NDContentPage.OnToolTipsLoaded({}); \ No newline at end of file diff --git a/Docs/classes/Python/Question.html b/Docs/classes/Python/Question.html new file mode 100644 index 0000000..2e42aab --- /dev/null +++ b/Docs/classes/Python/Question.html @@ -0,0 +1,17 @@ + + +Question + + + + + + + +
+
Question
+
Model
Question
+

Each Question has a Question no and a author associated to it

+
+ + \ No newline at end of file diff --git a/Docs/classes/Python/Session-Summary.js b/Docs/classes/Python/Session-Summary.js new file mode 100644 index 0000000..081e79e --- /dev/null +++ b/Docs/classes/Python/Session-Summary.js @@ -0,0 +1 @@ +NDFramePage.OnPageTitleLoaded("PythonClass:Session","Session");NDSummary.OnSummaryLoaded("PythonClass:Session",[["Python","Python"]],[["Classes","Class"]],[[2,0,0,"Session"]]); \ No newline at end of file diff --git a/Docs/classes/Python/Session-SummaryToolTips.js b/Docs/classes/Python/Session-SummaryToolTips.js new file mode 100644 index 0000000..de2af08 --- /dev/null +++ b/Docs/classes/Python/Session-SummaryToolTips.js @@ -0,0 +1 @@ +NDSummary.OnToolTipsLoaded("PythonClass:Session",{2:"
Session
Generates randam token for every section new Token is assigned to every User for every new session
"}); \ No newline at end of file diff --git a/Docs/classes/Python/Session-ToolTips.js b/Docs/classes/Python/Session-ToolTips.js new file mode 100644 index 0000000..59992a1 --- /dev/null +++ b/Docs/classes/Python/Session-ToolTips.js @@ -0,0 +1 @@ +NDContentPage.OnToolTipsLoaded({}); \ No newline at end of file diff --git a/Docs/classes/Python/Session.html b/Docs/classes/Python/Session.html new file mode 100644 index 0000000..5521b75 --- /dev/null +++ b/Docs/classes/Python/Session.html @@ -0,0 +1,17 @@ + + +Session + + + + + + + +
+
Session
+
Model
Session
+

Generates randam token for every section new Token is assigned to every User for every new session

+
+ + \ No newline at end of file diff --git a/Docs/classes/Python/Submission-Summary.js b/Docs/classes/Python/Submission-Summary.js new file mode 100644 index 0000000..44d54ea --- /dev/null +++ b/Docs/classes/Python/Submission-Summary.js @@ -0,0 +1 @@ +NDFramePage.OnPageTitleLoaded("PythonClass:Submission","Submission");NDSummary.OnSummaryLoaded("PythonClass:Submission",[["Python","Python"]],[["Classes","Class"],["Functions","Function"],["Groups","Group"]],[[6,0,0,"Submission"],[7,0,2,"Functions","Functions"],[8,0,1,"login_required","login_required"],[9,0,1,"changePath","changePath"],[10,0,1,"home","home"],[11,0,1,"dashboard","dashboard"],[12,0,1,"question","question"],[13,0,1,"contest: Function","contest_Function"],[14,0,1,"download","download"],[15,0,1,"server_static","server_static"],[16,0,1,"contest_ranking","contest_ranking"],[17,0,1,"rankings","rankings"],[18,0,1,"loggedIn","loggedIn"],[19,0,1,"createSession","createSession"],[20,0,1,"login","login"],[21,0,1,"resgiter","resgiter"],[22,0,1,"logout","logout"],[23,0,1,"file_upload","file_upload"],[24,0,1,"error404","error404"]]); \ No newline at end of file diff --git a/Docs/classes/Python/Submission-SummaryToolTips.js b/Docs/classes/Python/Submission-SummaryToolTips.js new file mode 100644 index 0000000..2a2b8f6 --- /dev/null +++ b/Docs/classes/Python/Submission-SummaryToolTips.js @@ -0,0 +1 @@ +NDSummary.OnToolTipsLoaded("PythonClass:Submission",{6:"
Submission
Class defines the submission of solution of a Question Stores the information about: User that submits the Solution Time of Submission Contest to whish The question belongs Whether the soolution is correct
",8:"
def login_required(
function
)
Extends the functainality of a funcion by checking log in condition.  Checks if the user is logged in.if not redirect the user to home page with message \'Login Required\' parameters : Function on which decorator is applied
",9:"
@app.route(
"/"
) def changePath()
redirects to home page
",10:"
@app.get(
"/home"
) def home()
redirects to Dashboard of the user
",11:"
@app.get(
"/dashboard"
) @login_required def dashboard()
redirects to Dashboard of the user
",12:"
@app.get(
"/contest/<code>/<number>"
) @login_required def question(code, number)
Checks if the question and Contest it belongs does exists.  If exists : it checks the current status of the contest And then returns the question state ment along with question numbers and contest code to the Template Parameters: code: Contest Code number: Question Number Return: Question Template
",13:"
Checks if contest exists by validating the contest id.  Checks the the current staus of code Parameters: code : contest code Return : Contest Template
",14:"
@app.get(
"/question/<path:path>"
) def download(path)
Downloads the question to local system Parameters: path :path to download from Return : Static Files: Downloadable Files
",15:"
@app.get(
"/static/<filepath:path>"
) def server_static(filepath)
Static files for server Parameters: path :path of file Return : Static Files
",16:"
@app.get(
"/ranking/<code>"
) def contest_ranking(code)
Generates rankinks of users in a Contest i.e the Contest results Validates the Sumbission And Contest Checks the number of correct submissions for each user and Added to list with tuples of Username Along with thier Scores . The tuples are added to list in descending order of the score .Then rankings are given to each Username in the list.
",17:"
@app.get(
"/ranking"
) def rankings()
Overall Ranking of the user over all the Contest.  Parameters: None Return : Ranking Template with Overall Ranking
",18:"
Downloads the question to local system Parameters: None Return : True: if Session exixsts for the user Logged In False: if Session not exixst for the user Logged In or if the s_id is not present or is wrong
",19:"
def createSession(
username
)
Create a session for the user Set up cookie for The current session with seesion id ,token and expiry time Parameters: username: Username of user For whom session is Created.  Return : Redirects to user Dashoard
",20:"
@app.post(
"/login"
) def login()
This function is called whenever user log in to the app Checks if the user entered the Right credentials for log in Parameters: None Return : Redirects to home if invalid credenial Else Creates the session for the user
",21:"
This function is called whenever new user registers New User is Created in the Data base and his credentials are stored Checks if the user with same username already exisxts Parameters: None Return : Creates session for new user.
",22:"
@app.get(
"/logout"
) def logout()
Ends the session for the user Deletes the session cookie
",23:"
@app.post(
"/check/<code>/<number>"
) @login_required def file_upload(code, number)
This Function is used to upload the submission to  Question to the Server.  Parameters: code: Contest Code number : Question No of ehich solution is uploaded Return : "Wrong Answer!! : If solution is wrong "Solved! Great Job! " : If solution is correct
",24:"
@app.error(
404
) def error404(error)
Handles Error Parameter: error : Error rturned the App Return : Redirects to
"}); \ No newline at end of file diff --git a/Docs/classes/Python/Submission-ToolTips.js b/Docs/classes/Python/Submission-ToolTips.js new file mode 100644 index 0000000..59992a1 --- /dev/null +++ b/Docs/classes/Python/Submission-ToolTips.js @@ -0,0 +1 @@ +NDContentPage.OnToolTipsLoaded({}); \ No newline at end of file diff --git a/Docs/classes/Python/Submission.html b/Docs/classes/Python/Submission.html new file mode 100644 index 0000000..07ba44d --- /dev/null +++ b/Docs/classes/Python/Submission.html @@ -0,0 +1,120 @@ + + +Submission + + + + + + + +
+
Submission
+
Model
Submission
+

Class defines the submission of solution of a Question Stores the information about: User that submits the Solution Time of Submission Contest to whish The question belongs Whether the soolution is correct

+
+ +
+
Functions
+
+ +
+
login_required
+
def login_required(
function
)
+

Extends the functainality of a funcion by checking log in condition.  Checks if the user is logged in.if not redirect the user to home page with message 'Login Required' parameters : Function on which decorator is applied

+
+ +
+
changePath
+
@app.route(
"/"
) def changePath()
+

redirects to home page

+
+ +
+
home
+
@app.get(
"/home"
) def home()
+

redirects to Dashboard of the user

+
+ +
+
dashboard
+
@app.get(
"/dashboard"
) @login_required def dashboard()
+

redirects to Dashboard of the user

+
+ +
+
question
+
@app.get(
"/contest/<code>/<number>"
) @login_required def question(code, number)
+

Checks if the question and Contest it belongs does exists.  If exists : it checks the current status of the contest And then returns the question state ment along with question numbers and contest code to the Template Parameters: code: Contest Code number: Question Number Return: Question Template

+
+ +
+
contest: Function
+

Checks if contest exists by validating the contest id.  Checks the the current staus of code Parameters: code : contest code Return : Contest Template

+
+ +
+
download
+
@app.get(
"/question/<path:path>"
) def download(path)
+

Downloads the question to local system Parameters: path :path to download from Return : Static Files: Downloadable Files

+
+ +
+
server_static
+
@app.get(
"/static/<filepath:path>"
) def server_static(filepath)
+

Static files for server Parameters: path :path of file Return : Static Files

+
+ +
+
contest_ranking
+
@app.get(
"/ranking/<code>"
) def contest_ranking(code)
+

Generates rankinks of users in a Contest i.e the Contest results Validates the Sumbission And Contest Checks the number of correct submissions for each user and Added to list with tuples of Username Along with thier Scores . The tuples are added to list in descending order of the score .Then rankings are given to each Username in the list.

Parameters

code : contest code Return : Ranking Template with ranks of different user in  a contest.

+
+ +
+
rankings
+
@app.get(
"/ranking"
) def rankings()
+

Overall Ranking of the user over all the Contest.  Parameters: None Return : Ranking Template with Overall Ranking

+
+ +
+
loggedIn
+

Downloads the question to local system Parameters: None Return : True: if Session exixsts for the user Logged In False: if Session not exixst for the user Logged In or if the s_id is not present or is wrong

+
+ +
+
createSession
+
def createSession(
username
)
+

Create a session for the user Set up cookie for The current session with seesion id ,token and expiry time Parameters: username: Username of user For whom session is Created.  Return : Redirects to user Dashoard

+
+ +
+
login
+
@app.post(
"/login"
) def login()
+

This function is called whenever user log in to the app Checks if the user entered the Right credentials for log in Parameters: None Return : Redirects to home if invalid credenial Else Creates the session for the user

+
+ +
+
resgiter
+

This function is called whenever new user registers New User is Created in the Data base and his credentials are stored Checks if the user with same username already exisxts Parameters: None Return : Creates session for new user.

+
+ +
+
logout
+
@app.get(
"/logout"
) def logout()
+

Ends the session for the user Deletes the session cookie

Parameters

None Return : Redirects to Home Page

+
+ +
+
file_upload
+
@app.post(
"/check/<code>/<number>"
) @login_required def file_upload(code, number)
+

This Function is used to upload the submission to  Question to the Server.  Parameters: code: Contest Code number : Question No of ehich solution is uploaded Return : "Wrong Answer!! : If solution is wrong "Solved! Great Job! " : If solution is correct

+
+ +
+
error404
+
@app.error(
404
) def error404(error)
+

Handles Error Parameter: error : Error rturned the App Return : Redirects to

+
+ + \ No newline at end of file diff --git a/Docs/classes/Python/User-Summary.js b/Docs/classes/Python/User-Summary.js new file mode 100644 index 0000000..00e6334 --- /dev/null +++ b/Docs/classes/Python/User-Summary.js @@ -0,0 +1 @@ +NDFramePage.OnPageTitleLoaded("PythonClass:User","User");NDSummary.OnSummaryLoaded("PythonClass:User",[["Python","Python"]],[["Classes","Class"]],[[1,0,0,"User"]]); \ No newline at end of file diff --git a/Docs/classes/Python/User-SummaryToolTips.js b/Docs/classes/Python/User-SummaryToolTips.js new file mode 100644 index 0000000..40fae6a --- /dev/null +++ b/Docs/classes/Python/User-SummaryToolTips.js @@ -0,0 +1 @@ +NDSummary.OnToolTipsLoaded("PythonClass:User",{1:"
User
Defines username and password for individual user.
"}); \ No newline at end of file diff --git a/Docs/classes/Python/User-ToolTips.js b/Docs/classes/Python/User-ToolTips.js new file mode 100644 index 0000000..59992a1 --- /dev/null +++ b/Docs/classes/Python/User-ToolTips.js @@ -0,0 +1 @@ +NDContentPage.OnToolTipsLoaded({}); \ No newline at end of file diff --git a/Docs/classes/Python/User.html b/Docs/classes/Python/User.html new file mode 100644 index 0000000..9ab28f5 --- /dev/null +++ b/Docs/classes/Python/User.html @@ -0,0 +1,17 @@ + + +User + + + + + + + +
+
User
+
Model
User
+

Defines username and password for individual user.

+
+ + \ No newline at end of file diff --git a/Docs/files/server-py-Summary.js b/Docs/files/server-py-Summary.js new file mode 100644 index 0000000..95342a0 --- /dev/null +++ b/Docs/files/server-py-Summary.js @@ -0,0 +1 @@ +NDFramePage.OnPageTitleLoaded("File:server.py","server.py");NDSummary.OnSummaryLoaded("File:server.py",[["Python","Python"]],[["Classes","Class"],["Functions","Function"],["Groups","Group"]],[[1,0,0,"User","User"],[2,0,0,"Session","Session"],[3,0,0,"Contest","Contest"],[4,0,0,"Question","Question"],[5,0,0,"ContestProblems","ContestProblems"],[6,0,0,"Submission","Submission"],[7,0,2,"Functions","Submission.Functions"],[8,0,1,"login_required","Submission.login_required"],[9,0,1,"changePath","Submission.changePath"],[10,0,1,"home","Submission.home"],[11,0,1,"dashboard","Submission.dashboard"],[12,0,1,"question","Submission.question"],[13,0,1,"contest: Function","Submission.contest_Function"],[14,0,1,"download","Submission.download"],[15,0,1,"server_static","Submission.server_static"],[16,0,1,"contest_ranking","Submission.contest_ranking"],[17,0,1,"rankings","Submission.rankings"],[18,0,1,"loggedIn","Submission.loggedIn"],[19,0,1,"createSession","Submission.createSession"],[20,0,1,"login","Submission.login"],[21,0,1,"resgiter","Submission.resgiter"],[22,0,1,"logout","Submission.logout"],[23,0,1,"file_upload","Submission.file_upload"],[24,0,1,"error404","Submission.error404"]]); \ No newline at end of file diff --git a/Docs/files/server-py-SummaryToolTips.js b/Docs/files/server-py-SummaryToolTips.js new file mode 100644 index 0000000..20446b5 --- /dev/null +++ b/Docs/files/server-py-SummaryToolTips.js @@ -0,0 +1 @@ +NDSummary.OnToolTipsLoaded("File:server.py",{1:"
User
Defines username and password for individual user.
",2:"
Session
Generates randam token for every section new Token is assigned to every User for every new session
",3:"
Contest
Each Contest instance contains:- Code Description of contest Contest start time and End Time
",4:"
Question
Each Question has a Question no and a author associated to it
",5:"
ContestProblems
All contest problems belong to a Contest and are itself a question.  contest defines the instance of Contest Class it belongs question defines the questions that belongs to that contest.
",6:"
Submission
Class defines the submission of solution of a Question Stores the information about: User that submits the Solution Time of Submission Contest to whish The question belongs Whether the soolution is correct
",8:"
def login_required(
function
)
Extends the functainality of a funcion by checking log in condition.  Checks if the user is logged in.if not redirect the user to home page with message \'Login Required\' parameters : Function on which decorator is applied
",9:"
@app.route(
"/"
) def changePath()
redirects to home page
",10:"
@app.get(
"/home"
) def home()
redirects to Dashboard of the user
",11:"
@app.get(
"/dashboard"
) @login_required def dashboard()
redirects to Dashboard of the user
",12:"
@app.get(
"/contest/<code>/<number>"
) @login_required def question(code, number)
Checks if the question and Contest it belongs does exists.  If exists : it checks the current status of the contest And then returns the question state ment along with question numbers and contest code to the Template Parameters: code: Contest Code number: Question Number Return: Question Template
",13:"
Checks if contest exists by validating the contest id.  Checks the the current staus of code Parameters: code : contest code Return : Contest Template
",14:"
@app.get(
"/question/<path:path>"
) def download(path)
Downloads the question to local system Parameters: path :path to download from Return : Static Files: Downloadable Files
",15:"
@app.get(
"/static/<filepath:path>"
) def server_static(filepath)
Static files for server Parameters: path :path of file Return : Static Files
",16:"
@app.get(
"/ranking/<code>"
) def contest_ranking(code)
Generates rankinks of users in a Contest i.e the Contest results Validates the Sumbission And Contest Checks the number of correct submissions for each user and Added to list with tuples of Username Along with thier Scores . The tuples are added to list in descending order of the score .Then rankings are given to each Username in the list.
",17:"
@app.get(
"/ranking"
) def rankings()
Overall Ranking of the user over all the Contest.  Parameters: None Return : Ranking Template with Overall Ranking
",18:"
Downloads the question to local system Parameters: None Return : True: if Session exixsts for the user Logged In False: if Session not exixst for the user Logged In or if the s_id is not present or is wrong
",19:"
def createSession(
username
)
Create a session for the user Set up cookie for The current session with seesion id ,token and expiry time Parameters: username: Username of user For whom session is Created.  Return : Redirects to user Dashoard
",20:"
@app.post(
"/login"
) def login()
This function is called whenever user log in to the app Checks if the user entered the Right credentials for log in Parameters: None Return : Redirects to home if invalid credenial Else Creates the session for the user
",21:"
This function is called whenever new user registers New User is Created in the Data base and his credentials are stored Checks if the user with same username already exisxts Parameters: None Return : Creates session for new user.
",22:"
@app.get(
"/logout"
) def logout()
Ends the session for the user Deletes the session cookie
",23:"
@app.post(
"/check/<code>/<number>"
) @login_required def file_upload(code, number)
This Function is used to upload the submission to  Question to the Server.  Parameters: code: Contest Code number : Question No of ehich solution is uploaded Return : "Wrong Answer!! : If solution is wrong "Solved! Great Job! " : If solution is correct
",24:"
@app.error(
404
) def error404(error)
Handles Error Parameter: error : Error rturned the App Return : Redirects to
"}); \ No newline at end of file diff --git a/Docs/files/server-py-ToolTips.js b/Docs/files/server-py-ToolTips.js new file mode 100644 index 0000000..59992a1 --- /dev/null +++ b/Docs/files/server-py-ToolTips.js @@ -0,0 +1 @@ +NDContentPage.OnToolTipsLoaded({}); \ No newline at end of file diff --git a/Docs/files/server-py.html b/Docs/files/server-py.html new file mode 100644 index 0000000..09613bd --- /dev/null +++ b/Docs/files/server-py.html @@ -0,0 +1,150 @@ + + +server.py + + + + + + + +
+
User
+
Model
User
+

Defines username and password for individual user.

+
+ +
+
Session
+
Model
Session
+

Generates randam token for every section new Token is assigned to every User for every new session

+
+ +
+
Contest
+
Model
Contest
+

Each Contest instance contains:- Code Description of contest Contest start time and End Time

+
+ +
+
Question
+
Model
Question
+

Each Question has a Question no and a author associated to it

+
+ +
+
ContestProblems
+
Model
ContestProblems
+

All contest problems belong to a Contest and are itself a question.  contest defines the instance of Contest Class it belongs question defines the questions that belongs to that contest.

+
+ +
+
Submission
+
Model
Submission
+

Class defines the submission of solution of a Question Stores the information about: User that submits the Solution Time of Submission Contest to whish The question belongs Whether the soolution is correct

+
+ +
+
Functions
+
+ +
+
login_required
+
def login_required(
function
)
+

Extends the functainality of a funcion by checking log in condition.  Checks if the user is logged in.if not redirect the user to home page with message 'Login Required' parameters : Function on which decorator is applied

+
+ +
+
changePath
+
@app.route(
"/"
) def changePath()
+

redirects to home page

+
+ +
+
home
+
@app.get(
"/home"
) def home()
+

redirects to Dashboard of the user

+
+ +
+
dashboard
+
@app.get(
"/dashboard"
) @login_required def dashboard()
+

redirects to Dashboard of the user

+
+ +
+
question
+
@app.get(
"/contest/<code>/<number>"
) @login_required def question(code, number)
+

Checks if the question and Contest it belongs does exists.  If exists : it checks the current status of the contest And then returns the question state ment along with question numbers and contest code to the Template Parameters: code: Contest Code number: Question Number Return: Question Template

+
+ +
+
contest: Function
+

Checks if contest exists by validating the contest id.  Checks the the current staus of code Parameters: code : contest code Return : Contest Template

+
+ +
+
download
+
@app.get(
"/question/<path:path>"
) def download(path)
+

Downloads the question to local system Parameters: path :path to download from Return : Static Files: Downloadable Files

+
+ +
+
server_static
+
@app.get(
"/static/<filepath:path>"
) def server_static(filepath)
+

Static files for server Parameters: path :path of file Return : Static Files

+
+ +
+
contest_ranking
+
@app.get(
"/ranking/<code>"
) def contest_ranking(code)
+

Generates rankinks of users in a Contest i.e the Contest results Validates the Sumbission And Contest Checks the number of correct submissions for each user and Added to list with tuples of Username Along with thier Scores . The tuples are added to list in descending order of the score .Then rankings are given to each Username in the list.

Parameters

code : contest code Return : Ranking Template with ranks of different user in  a contest.

+
+ +
+
rankings
+
@app.get(
"/ranking"
) def rankings()
+

Overall Ranking of the user over all the Contest.  Parameters: None Return : Ranking Template with Overall Ranking

+
+ +
+
loggedIn
+

Downloads the question to local system Parameters: None Return : True: if Session exixsts for the user Logged In False: if Session not exixst for the user Logged In or if the s_id is not present or is wrong

+
+ +
+
createSession
+
def createSession(
username
)
+

Create a session for the user Set up cookie for The current session with seesion id ,token and expiry time Parameters: username: Username of user For whom session is Created.  Return : Redirects to user Dashoard

+
+ +
+
login
+
@app.post(
"/login"
) def login()
+

This function is called whenever user log in to the app Checks if the user entered the Right credentials for log in Parameters: None Return : Redirects to home if invalid credenial Else Creates the session for the user

+
+ +
+
resgiter
+

This function is called whenever new user registers New User is Created in the Data base and his credentials are stored Checks if the user with same username already exisxts Parameters: None Return : Creates session for new user.

+
+ +
+
logout
+
@app.get(
"/logout"
) def logout()
+

Ends the session for the user Deletes the session cookie

Parameters

None Return : Redirects to Home Page

+
+ +
+
file_upload
+
@app.post(
"/check/<code>/<number>"
) @login_required def file_upload(code, number)
+

This Function is used to upload the submission to  Question to the Server.  Parameters: code: Contest Code number : Question No of ehich solution is uploaded Return : "Wrong Answer!! : If solution is wrong "Solved! Great Job! " : If solution is correct

+
+ +
+
error404
+
@app.error(
404
) def error404(error)
+

Handles Error Parameter: error : Error rturned the App Return : Redirects to

+
+ + \ No newline at end of file diff --git a/Docs/index.html b/Docs/index.html new file mode 100644 index 0000000..813c6ad --- /dev/null +++ b/Docs/index.html @@ -0,0 +1,9 @@ + + +Source Documentation + + + + + +
\ No newline at end of file diff --git a/Docs/menu/classes.js b/Docs/menu/classes.js new file mode 100644 index 0000000..2eb3f71 --- /dev/null +++ b/Docs/menu/classes.js @@ -0,0 +1 @@ +NDMenu.OnSectionLoaded("classes.js",[[1,"Contest"],[1,"ContestProblems"],[1,"Question"],[1,"Session"],[1,"Submission"],[1,"User"]]); \ No newline at end of file diff --git a/Docs/menu/files.js b/Docs/menu/files.js new file mode 100644 index 0000000..d54ed9c --- /dev/null +++ b/Docs/menu/files.js @@ -0,0 +1 @@ +NDMenu.OnSectionLoaded("files.js",[[1,"server.py"]]); \ No newline at end of file diff --git a/Docs/menu/tabs.js b/Docs/menu/tabs.js new file mode 100644 index 0000000..8fc21d8 --- /dev/null +++ b/Docs/menu/tabs.js @@ -0,0 +1 @@ +NDMenu.OnTabsLoaded([["File","Files","File:","files.js"],["Class","Classes","PythonClass:","classes.js"]]); \ No newline at end of file diff --git a/Docs/other/home.html b/Docs/other/home.html new file mode 100644 index 0000000..4d89783 --- /dev/null +++ b/Docs/other/home.html @@ -0,0 +1,13 @@ + + +Source Documentation + + + + + + + +
Source Documentation
+ +
\ No newline at end of file diff --git a/Docs/search/index.js b/Docs/search/index.js new file mode 100644 index 0000000..ef87c42 --- /dev/null +++ b/Docs/search/index.js @@ -0,0 +1 @@ +NDSearch.OnPrefixIndexLoaded(["cha","con","cre","das","dow","err","fil","fun","hom","log","que","ran","res","ser","ses","sub","use"]); \ No newline at end of file diff --git a/Docs/search/keywords/006300680061.js b/Docs/search/keywords/006300680061.js new file mode 100644 index 0000000..b7ad4ef --- /dev/null +++ b/Docs/search/keywords/006300680061.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("cha",["Function"],[["changePath",,[["Submission",,,,0,"File:server.py:Submission.changePath","PythonClass:Submission:changePath"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/0063006f006e.js b/Docs/search/keywords/0063006f006e.js new file mode 100644 index 0000000..ee38a7e --- /dev/null +++ b/Docs/search/keywords/0063006f006e.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("con",["Class","Function"],[["Contest",,[[,,,,0,"File:server.py:Contest","PythonClass:Contest"]]],["contest:",,[["Submission","contest: Function",,"contest:function",1,"File:server.py:Submission.contest_Function","PythonClass:Submission:contest_Function"]]],["contest_ranking",,[["Submission",,,,1,"File:server.py:Submission.contest_ranking","PythonClass:Submission:contest_ranking"]]],["ContestProblems",,[[,,,,0,"File:server.py:ContestProblems","PythonClass:ContestProblems"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/006300720065.js b/Docs/search/keywords/006300720065.js new file mode 100644 index 0000000..091d82e --- /dev/null +++ b/Docs/search/keywords/006300720065.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("cre",["Function"],[["createSession",,[["Submission",,,,0,"File:server.py:Submission.createSession","PythonClass:Submission:createSession"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/006400610073.js b/Docs/search/keywords/006400610073.js new file mode 100644 index 0000000..1eea64b --- /dev/null +++ b/Docs/search/keywords/006400610073.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("das",["Function"],[["dashboard",,[["Submission",,,,0,"File:server.py:Submission.dashboard","PythonClass:Submission:dashboard"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/0064006f0077.js b/Docs/search/keywords/0064006f0077.js new file mode 100644 index 0000000..7205e16 --- /dev/null +++ b/Docs/search/keywords/0064006f0077.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("dow",["Function"],[["download",,[["Submission",,,,0,"File:server.py:Submission.download","PythonClass:Submission:download"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/006500720072.js b/Docs/search/keywords/006500720072.js new file mode 100644 index 0000000..575a2a3 --- /dev/null +++ b/Docs/search/keywords/006500720072.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("err",["Function"],[["error404",,[["Submission",,,,0,"File:server.py:Submission.error404","PythonClass:Submission:error404"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/00660069006c.js b/Docs/search/keywords/00660069006c.js new file mode 100644 index 0000000..317a997 --- /dev/null +++ b/Docs/search/keywords/00660069006c.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("fil",["Function"],[["file_upload",,[["Submission",,,,0,"File:server.py:Submission.file_upload","PythonClass:Submission:file_upload"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/00660075006e.js b/Docs/search/keywords/00660075006e.js new file mode 100644 index 0000000..eaaa235 --- /dev/null +++ b/Docs/search/keywords/00660075006e.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("fun",["Function"],[["Function",,[["Submission","contest: Function",,"contest:function",0,"File:server.py:Submission.contest_Function","PythonClass:Submission:contest_Function"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/0068006f006d.js b/Docs/search/keywords/0068006f006d.js new file mode 100644 index 0000000..da37c5e --- /dev/null +++ b/Docs/search/keywords/0068006f006d.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("hom",["Function"],[["home",,[["Submission",,,,0,"File:server.py:Submission.home","PythonClass:Submission:home"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/006c006f0067.js b/Docs/search/keywords/006c006f0067.js new file mode 100644 index 0000000..c9a0d59 --- /dev/null +++ b/Docs/search/keywords/006c006f0067.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("log",["Function"],[["loggedIn",,[["Submission",,,,0,"File:server.py:Submission.loggedIn","PythonClass:Submission:loggedIn"]]],["login",,[["Submission",,,,0,"File:server.py:Submission.login","PythonClass:Submission:login"]]],["login_required",,[["Submission",,,,0,"File:server.py:Submission.login_required","PythonClass:Submission:login_required"]]],["logout",,[["Submission",,,,0,"File:server.py:Submission.logout","PythonClass:Submission:logout"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/007100750065.js b/Docs/search/keywords/007100750065.js new file mode 100644 index 0000000..83ec4d6 --- /dev/null +++ b/Docs/search/keywords/007100750065.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("que",["Class","Function"],[["Question",,[[,,,,0,"File:server.py:Question","PythonClass:Question"],["Submission","question",,,1,"File:server.py:Submission.question","PythonClass:Submission:question"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/00720061006e.js b/Docs/search/keywords/00720061006e.js new file mode 100644 index 0000000..5510e76 --- /dev/null +++ b/Docs/search/keywords/00720061006e.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("ran",["Function"],[["rankings",,[["Submission",,,,0,"File:server.py:Submission.rankings","PythonClass:Submission:rankings"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/007200650073.js b/Docs/search/keywords/007200650073.js new file mode 100644 index 0000000..5a094aa --- /dev/null +++ b/Docs/search/keywords/007200650073.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("res",["Function"],[["resgiter",,[["Submission",,,,0,"File:server.py:Submission.resgiter","PythonClass:Submission:resgiter"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/007300650072.js b/Docs/search/keywords/007300650072.js new file mode 100644 index 0000000..1d5fe66 --- /dev/null +++ b/Docs/search/keywords/007300650072.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("ser",["Function"],[["server_static",,[["Submission",,,,0,"File:server.py:Submission.server_static","PythonClass:Submission:server_static"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/007300650073.js b/Docs/search/keywords/007300650073.js new file mode 100644 index 0000000..268c954 --- /dev/null +++ b/Docs/search/keywords/007300650073.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("ses",["Class"],[["Session",,[[,,,,0,"File:server.py:Session","PythonClass:Session"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/007300750062.js b/Docs/search/keywords/007300750062.js new file mode 100644 index 0000000..b7c0174 --- /dev/null +++ b/Docs/search/keywords/007300750062.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("sub",["Class"],[["Submission",,[[,,,,0,"File:server.py:Submission","PythonClass:Submission"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/007500730065.js b/Docs/search/keywords/007500730065.js new file mode 100644 index 0000000..520935e --- /dev/null +++ b/Docs/search/keywords/007500730065.js @@ -0,0 +1 @@ +NDSearch.OnPrefixDataLoaded("use",["Class"],[["User",,[[,,,,0,"File:server.py:User","PythonClass:User"]]]]); \ No newline at end of file diff --git a/Docs/styles/Default/Default.css b/Docs/styles/Default/Default.css new file mode 100644 index 0000000..6cc2700 --- /dev/null +++ b/Docs/styles/Default/Default.css @@ -0,0 +1,12 @@ +/* +This file is part of Natural Docs, which is Copyright © 2003-2018 Code Clear LLC. +Natural Docs is licensed under version 3 of the GNU Affero General Public +License (AGPL). Refer to License.txt or www.naturaldocs.org for the +complete details. + +This file may be distributed with documentation files generated by Natural Docs. +Such documentation is not covered by Natural Docs' copyright and licensing, +and may have its own copyright and distribution terms as decided by its author. +*/ + +html{height:100%;font:10pt "Trebuchet MS",Tahoma,Geneva,sans-serif}body.NDFramePage{background-color:#E0E0E0;margin:0;padding:0}a:link,a:visited{text-decoration:none}a:hover,a:active{text-decoration:underline}table{margin:0;padding:0;border:0 none;border-spacing:0}td{margin:0;padding:0;border:0 none;border-spacing:0;vertical-align:top}#NDLoadingNotice{height:40px;background:URL("images/menu-loading.gif") no-repeat center center}#NDJavaScriptRequiredNotice{margin:20px;text-align:center;font:10pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif}#NDHeader{background-color:#7070C0;padding:.65em .65em .55em .65em;border-bottom:1px solid #7070C0;z-index:2}#HTitle{font:22pt Georgia,serif;text-shadow:0 .1ex .3ex #202020;line-height:90%}#HTitle,#HTitle a:link,#HTitle a:hover,#HTitle a:active,#HTitle a:visited{color:#FFFFFF;text-decoration:none}#HSubtitle{font:10pt Georgia,serif;margin-left:.65em;text-shadow:0 .1ex .3ex #202020}#HSubtitle,#HSubtitle a:link,#HSubtitle a:hover,#HSubtitle a:active,#HSubtitle a:visited{color:#C8C8C8;text-decoration:none}#NDSearchField{z-index:201;width:25ex;color:#000000;font:10pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif;background:#FFFFFF URL("images/search.png") no-repeat left center;padding:.5ex 1.5ex .5ex 3.5ex;border:0 none;-moz-border-radius:5ex;border-radius:5ex;display:none}.IE #NDSearchField{font:inherit}#NDSearchField.DefaultText{color:#808080;font-style:italic}#NDSearchField:focus{outline:none}#NDSearchResults{z-index:200;overflow:auto;font:10pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif;background-color:#FFFFFF;padding:.5ex 0;border-style:solid;border-width:1px;border-color:#BCBCBC #747474 #747474 #BCBCBC;-moz-box-shadow:.15ex .25ex .4ex #606060;-webkit-box-shadow:.15ex .25ex .4ex #606060;box-shadow:.15ex .25ex .4ex #606060}.SeEntry{padding:.2ex 1.25ex .2ex 3.25ex;color:#000000;border-width:1px 0;border-style:solid;border-color:#FFFFFF}.SeEntry:hover{background-color:#E8E8E8}#SeSelectedEntry{background-color:#E8E8E8;border-color:#D0D0D0}a.SeEntry{display:block}a.SeEntry:link,a.SeEntry:hover,a.SeEntry:active,a.SeEntry:visited{color:#000000;text-decoration:none}.SeQualifier,.SeChildCount{font-weight:normal;color:#7C7C7C}.SeParent.open .SeChildCount{display:none}.SeChildren.closed{display:none}.SeChildren .SeEntry{padding-left:5.5ex}.SeEntryIcon{position:absolute;left:1.7ex;width:.8ex;height:.9em;margin-top:2px}.SeChildren .SeEntryIcon{left:3.9ex}.SeParent .SeEntryIcon{margin-top:4px;margin-left:1px;background:url("images/search-parent.png") center center no-repeat}.TClass .SeEntryIcon,.TInterface .SeEntryIcon,.TStruct .SeEntryIcon{width:2ex;height:1em;left:.9ex;background:url("images/search-class.png") center center no-repeat}.SeChildren .TClass .SeEntryIcon,.SeChildren .TInterface .SeEntryIcon,.SeChildren .TStruct .SeEntryIcon{left:3.15ex}.SeEntry.TClass,.SeEntry.TInterface,.SeEntry.TStruct{font-weight:bold}.SeEntry.MoreResults{font-weight:bold;margin-top:.75em}.SeStatus{margin:.25ex 1.25ex;color:#A0A0A0;text-align:center}.SeEntry+.SeStatus,.SeChildren+.SeStatus{margin-top:.75ex;padding-top:.75ex;border-top:1px solid #C0C0C0}.SeStatus.Searching{font-style:italic}#NDMenu{background-color:#E0E0E0;z-index:5;overflow:auto;width:30ex;display:none}.IE7 #NDMenu{overflow-x:hidden}#NDMenu a:hover,#NDMenu a:active{text-decoration:none}.MLoadingNotice{height:20px;background:URL("images/menu-loading.gif") no-repeat center bottom}#MTabBar{background-color:#C0C0C0}.MTab{background-color:#E0E0E0;border-right:1px solid #C0C0C0;border-bottom:1px solid #C0C0C0;display:inline-block;padding:2px 5px;opacity:.55}.MTab:hover{background-color:#EEEEEE;opacity:1}.MTab.Selected{border-bottom:1px solid #E0E0E0;opacity:1}a.MTab:active,a.MTab:focus{outline:0}.IE6 .MTab,.IE7 .MTab,.IE8 .MTab{background-color:#D0D0D0}.IE6 .MTab.Selected,.IE7 .MTab.Selected,.IE8 .MTab.Selected{background-color:#E0E0E0}.IE6 .MTab:hover,.IE7 .MTab:hover,.IE8 .MTab:hover{background-color:#EEEEEE}.MTabIcon{display:inline-block;width:16px;height:16px;position:relative;top:3px}.IE7 .MTabIcon,.IE6 .MTabIcon{top:0}#MFileTab .MTabIcon{background:url("images/menu-tab-files.png") center center no-repeat}#MClassTab .MTabIcon{background:url("images/menu-tab-classes.png") center center no-repeat}#MDatabaseTab .MTabIcon{background:url("images/menu-tab-database.png") center center no-repeat}.MTabTitle{display:inline-block;color:#606060;font:italic 10pt "Trebuchet MS",Tahoma,Geneva,sans-serif;margin:0 4px}.MTab.Narrow .MTabTitle{width:1px;margin:0 -1px 0 0;visibility:hidden}.IE6 .MTab.Narrow .MTabTitle{display:none}.MEntry{display:block;font:10pt "Trebuchet MS",Tahoma,Geneva,sans-serif;padding:.4ex 1.5ex .4ex 3ex}.MEntry,a.MEntry{color:#606060}a.MEntry:hover,a.MEntry:active{background-color:#EEEEEE}.MTabAsFolder{padding-left:1ex}.MFolder{font-weight:bold}.MFolder.Parent{border-bottom:1px solid #C0C0C0}.MFolder.Parent,a.MFolder.Parent{color:#808080}.MFolder.Parent,.MFolder.Selected{padding-left:1.5ex}.MFolder.Parent.Empty{border-bottom-style:dashed;color:#B0B0B0}.MFolder.Child{padding-right:2.5ex}.MFolderIcon{position:absolute;right:0;background:url("images/menu-folder-arrow.png") center center no-repeat;width:6px;height:7px;padding:.8em 1.2em 0 0}.IE6 .MFolderIcon{padding-top:0}.MFolder.Selected{font-weight:bold;background-color:#FFFFFF;border-bottom:3px solid #888888}.MFile.Selected{background-color:#FFFFFF;font-weight:bold}#NDSummary{background-color:#F8F8F8;border-left:1px solid #D8D8D8;border-right:1px solid #E8E8E8;z-index:4;overflow:auto;width:30ex;display:none}#NDSummary a:hover,#NDSummary a:active{text-decoration:none}.SuLoadingNotice{height:20px;background:URL("images/summary-loading.gif") no-repeat center bottom}.SuEntry{display:block;font:10pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif;padding:1px 1.5ex 1px 3.5ex}.SuEntry.first{margin-top:1ex}.SuEntry.last{margin-bottom:2ex}.SuEntry{color:#707070}.SuEntryIcon{position:absolute;left:1.8ex;width:.8ex;height:.9em;margin-top:2px}.SuEntry.TClass,.SuEntry.TInterface,.SuEntry.TStruct,.SuEntry.TSection,.SuEntry.TDatabase,.SuEntry.TDatabaseTable,.SuEntry.TFile.first{font:bold 11pt "Trebuchet MS",Tahoma,Geneva,sans-serif;color:#6B6B6B;padding-left:1.25ex;padding-top:.75ex;padding-bottom:.75ex;margin:2.5ex 0 .5ex 0;line-height:120%;border-bottom:1px solid #D4D4D4}.SuEntry.TClass.first,.SuEntry.TInterface.first,.SuEntry.TStruct.first,.SuEntry.TSection.first,.SuEntry.TDatabase.first,.SuEntry.TDatabaseTable.first,.SuEntry.TFile.first{border-top:0 none;margin-top:0}.SuEntry .Qualifier{font-weight:normal}.SuEntry.TGroup{font:bold 10pt "Trebuchet MS",Tahoma,Geneva,sans-serif;color:#6B6B6B;padding-left:1.5ex;padding-top:.25ex;padding-bottom:.25ex;margin:1.25ex 0 0 0;line-height:120%}.SuEntry.TClass+.SuEntry.TGroup,.SuEntry.TInterface+.SuEntry.TGroup{margin-top:.75ex}a.SuEntry:hover,a.SuEntry:active{background-color:#E6E6E6}#NDMenuSizer,#NDSummarySizer{cursor:e-resize;width:.8ex;z-index:101}#NDMenuSizer:hover,#NDMenuSizer.Dragging{background-color:#F8F8F8;border-left:1px solid #D8D8D8;border-right:1px solid #D8D8D8}#NDSummarySizer:hover,#NDSummarySizer.Dragging{background-color:#FFFFFF;border-right:1px solid #E8E8E8}#NDContentCover{position:fixed;z-index:100;background:url("images/transparent.gif") no-repeat}#NDContent{z-index:3;overflow:hidden;display:none}#CFrame{width:100%;height:100%;border:0 none}body.NDContentPage{background-color:#FFFFFF;padding:.5em 1em;margin:0}.CTopic{margin-bottom:1em;font:10pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif}.CTitle{font:bold 14pt "Trebuchet MS",Tahoma,Geneva,sans-serif;margin:1.5em 0 .5em 0;border-bottom:1px solid #C0C0C0}.CTopic.first .CTitle{margin-top:0}.CTitle .Qualifier{color:#404040;font-weight:normal}.TClass .CTitle,.TInterface .CTitle,.TStruct .CTitle,.TSection .CTitle,.TDatabase .CTitle,.TDatabaseTable .CTitle,.TFile.first .CTitle{font-size:20pt;border-color:#A8A8A8;line-height:110%;padding-bottom:.05em}.TGroup .CTitle{text-transform:uppercase;font-size:16pt;border-bottom:2px solid #000000}.CHeading{font:bold 11pt "Trebuchet MS",Tahoma,Geneva,sans-serif;margin:1.2em 0 .5em 0}.CHeading:first-child{margin-top:0}.CTopic p{margin:0 0 .5em 0;text-indent:4ex}.CTopic a:link,.CTopic a:visited,.CTopic a:hover{color:#880000}.CTopic a:active{color:#F04040}.CTopic ul{margin:0 0 0 6ex;padding:0}.CTopic ul ul{margin:0 0 0 2.5ex}.CTopic li{list-style-type:disc}.CTopic li p{text-indent:0}table.CDefinitionList{margin:0 0 0 4ex}td.CDLEntry{font:bold 10pt "Trebuchet MS",Tahoma,Geneva,sans-serif;padding:0 2ex .5em 0;min-width:18%;line-height:123%}.CDLParameterType{opacity:0.5}td.CDLDefinition p{text-indent:0}.CTopic pre{font:9pt Consolas,"Courier New",monospace;overflow:auto;margin:1em 4.5ex;border-style:solid;border-color:#E0E0E0;border-width:1px 1px 1px 1.5ex;padding:.5ex 1ex}.CBodyNDMarkup{font:8pt Verdana,sans-serif;color:#787800;background-color:#FFFFF0;border:1px solid #A0A000;padding:.5em}.NDPrototype{font:10pt Consolas,"Courier New",monospace;background-color:#FFFFFF;border:1px solid #808080;margin:0 5ex 1em 5ex;padding:.75ex 1.25ex 1.25ex 1.25ex;overflow:auto}.NDPrototype td{white-space:nowrap}.NDPrototype.NarrowForm td.PBeforeParameters,.NDPrototype.NarrowForm td.PAfterParameters,.NDPrototype.NarrowForm td.PDefaultValue{white-space:normal}.NarrowForm table.PParameters td.last{width:100%}.NarrowForm table.PParameters td.first,.NarrowForm.CStyle td.PAfterParameters{padding-left:3.5ex}.WideForm td.PAfterParameters{vertical-align:bottom}.CStyle .PPostPrototypeLine{padding-left:3.5ex}.CDLParameterType{font:8pt Consolas,"Courier New",monospace;white-space:nowrap}.NDPrototype a:link,.NDPrototype a:visited,.NDPrototype a:hover,.NDPrototype a:active,.CDLParameterType a:link,.CDLParameterType a:visited,.CDLParameterType a:hover,.CDLParameterType a:active{color:#000000}.NDPrototype:hover a:link,.NDPrototype:hover a:visited,.NDPrototype:hover a:hover,.NDPrototype:hover a:active,.CDLEntry:hover .CDLParameterType a:link,.CDLEntry:hover .CDLParameterType a:visited,.CDLEntry:hover .CDLParameterType a:hover,.CDLEntry:hover .CDLParameterType a:active{text-decoration:underline}.PNameModifier,.CStyle .PModifierQualifier,.PDefaultValue,.PDefaultValueSeparator{opacity:0.45}.PNameModifier,.CStyle .PModifierQualifier,.CStyle .PNamePrefix{text-align:right}.NDClassPrototype{margin:0 4ex 1em 4ex}.CPEntry{border-width:1px 2px 2px 1px;border-style:solid;border-color:#000000;padding:.5ex 1ex;margin-bottom:4px;-moz-border-radius:1ex;border-radius:1ex;background-color:#FFFFFF;overflow:auto}a.CPEntry,a.CPAdditionalChildrenNotice{display:block}a.CPEntry:link,a.CPEntry:hover,a.CPEntry:visited,a.CPEntry:active{color:#000000;text-decoration:none}a.CPEntry:hover .CPName,a.CPEntry:active .CPName{text-decoration:underline}.NDClassPrototype .CPEntry.Parent{margin-right:3.5ex}.NDClassPrototype.HasChildren .CPEntry.Parent{margin-right:7ex}.NDClassPrototype.HasParents .CPEntry.Current{margin-left:3.5ex}.NDClassPrototype.HasChildren .CPEntry.Current{margin-right:3.5ex}.NDClassPrototype .CPEntry.Child,.NDClassPrototype .CPAdditionalChildrenNotice{margin-left:3.5ex}.NDClassPrototype.HasParents .CPEntry.Child,.NDClassPrototype.HasParents .CPAdditionalChildrenNotice{margin-left:7ex}.CPName{font:bold 11pt "Trebuchet MS",Tahoma,Geneva,sans-serif;line-height:110%}.CPName .Qualifier,.CPName .TemplateSignature{font-weight:normal;color:#282828}.CPEntry.Parent .CPName,.CPEntry.Child .CPName{font-size:10pt}.CPEntry.Parent,.CPEntry.Child{opacity:.5}.CPEntry .CPPrePrototypeLine,.CPEntry .CPModifiers,.CPEntry .CPPostPrototypeLine{font:8pt Consolas,"Courier New",monospace;opacity:.5}.CPEntry.Parent .CPModifiers,.CPEntry.Child .CPModifiers{opacity:.75}.CPEntry .CPPostPrototypeLine{margin-left:4ex}a.CPAdditionalChildrenNotice:link,a.CPAdditionalChildrenNotice:visited,a.CPAdditionalChildrenNotice:hover,a.CPAdditionalChildrenNotice:active{color:#949494;font:italic 10pt "Trebuchet MS",Tahoma,Geneva,sans-serif;padding:0 1.5ex}.CPAdditionalChildren{display:none}.TFunction .NDPrototype,.TOperator .NDPrototype{background-color:#F0F0F0;border-color:#C8C8C8}.TFunction .SuEntryIcon,.TOperator .SuEntryIcon{background-color:#EAEAEA;border:1px solid #C7C7C7}.TFunction .SeEntryIcon,.TOperator .SeEntryIcon{background-color:#ECECEC;border:1px solid #C2C2C2}.TProperty .NDPrototype{background-color:#ECECFF;border-color:#C0C0D6}.TProperty .SuEntryIcon{background-color:#DCDCFF;border:1px solid #BEBED4}.TProperty .SeEntryIcon{background-color:#D8DAFF;border:1px solid #BABAD0}.TVariable .NDPrototype,.TDatabaseField .NDPrototype{background-color:#FCFCE6;border-color:#D2D2B8}.TVariable .SuEntryIcon,.TDatabaseField .SuEntryIcon{background-color:#F9F9C5;border:1px solid #D0D09A}.TVariable .SeEntryIcon,.TDatabaseField .SeEntryIcon{background-color:#F9F9C4;border:1px solid #CFCEB4}.TConstant .NDPrototype{background-color:#CACACA;border-color:#979797}.TConstant .SuEntryIcon{background-color:#C6C6C6;border:1px solid #A6A6A6}.TConstant .SeEntryIcon{background-color:#C6C6C6;border:1px solid #969696}.TType .NDPrototype,.TEnumeration .NDPrototype,.TDelegate .NDPrototype{background-color:#FCEFDE;border-color:#D8CBBA}.TType .SuEntryIcon,.TEnumeration .SuEntryIcon,.TDelegate .SuEntryIcon{background-color:#F7E6D3;border:1px solid #D8C7B3}.TType .SeEntryIcon,.TEnumeration .SeEntryIcon,.TDelegate .SeEntryIcon{background-color:#F5E3D1;border:1px solid #D4C3B2}.TEvent .NDPrototype{background-color:#E6F9E6;border-color:#BCCFBC}.TEvent .SuEntryIcon{background-color:#D3F3D3;border:1px solid #B2D1B1}.TEvent .SeEntryIcon{background-color:#D3F3D3;border:1px solid #B2D1B1}.NDClassPrototype .CPEntry{border-color:#686868;background-color:#EAEAEA}.IE6 .NDClassPrototype .CPEntry.Parent,.IE6 .NDClassPrototype .CPEntry.Child,.IE7 .NDClassPrototype .CPEntry.Parent,.IE7 .NDClassPrototype .CPEntry.Child,.IE8 .NDClassPrototype .CPEntry.Parent,.IE8 .NDClassPrototype .CPEntry.Child{border-color:#B4B4B4;background-color:#F5F5F5}.NDClassPrototype .CPEntry.TInterface{border-color:#686879;background-color:#EAEAFF}.IE6 .NDClassPrototype .CPEntry.TInterface.Parent,.IE6 .NDClassPrototype .CPEntry.TInterface.Child,.IE7 .NDClassPrototype .CPEntry.TInterface.Parent,.IE7 .NDClassPrototype .CPEntry.TInterface.Child,.IE8 .NDClassPrototype .CPEntry.TInterface.Parent,.IE8 .NDClassPrototype .CPEntry.TInterface.Child{border-color:#B3B3BB;background-color:#F5F5FF}.SHComment{color:#808080}.SHKeyword{color:#880000}.SHNumber,.SHString{color:#000088}.SHPreprocessingDirective{color:#000000;font-weight:bold}.SHMetadata{color:#808000}.CPPrePrototypeLine .SHMetadata{color:#484800}.NDToolTip{background-color:#FFFFF0;border-style:solid;border-width:1px;border-color:#A0A193 #57574B #57574B #A0A193;padding:1ex;overflow:hidden;-moz-border-radius:1ex;border-radius:1ex;-moz-box-shadow:.15ex .25ex .4ex #606060;-webkit-box-shadow:.15ex .25ex .4ex #606060;box-shadow:.15ex .25ex .4ex #606060}.NDToolTip .NDPrototype,.NDToolTip .NDClassPrototype{margin:0;overflow:hidden}.NDToolTip .NDClassPrototype .CPEntry{margin-left:0 !important;margin-right:0 !important}.TTSummary{font:10pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif;max-width:75ex}.NDPrototype+.TTSummary{margin-top:.5em}#NDFooter{background-color:#E0E0E0;font:7pt "Trebuchet MS",Tahoma,Geneva,sans-serif;padding:.1em 1ex;text-align:right;z-index:1}#NDFooter,#NDFooter a{color:#808080}#FCopyright,#FTimestamp{display:inline}#FCopyright:after,#FTimestamp:after{white-space:pre;content:" · "}.IE6 #FCopyright,.IE7 #FCopyright,.IE6 #FTimestamp,.IE7 #FTimestamp{margin-right:3ex}#FGeneratedBy{display:inline}body.NDHomePage{padding:0;margin:0;background-color:#E0E0E0;background-image:-moz-linear-gradient(top,#7070C0,#E0E0E0);background-image:-webkit-gradient(linear,left top,left bottom,from(#7070C0),to(#E0E0E0));background-image:-o-linear-gradient(top,#7070C0,#E0E0E0);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#7070C0',endColorstr='#E0E0E0',GradientType=0 );background-image:-ms-linear-gradient(top,#7070C0 0%,#E0E0E0 100%);background-image:linear-gradient(top,#7070C0,#E0E0E0);background-repeat:no-repeat;background-attachment:fixed;height:100%}.HTitle,.HSubtitle,.HCopyright,.HTimestamp,.HGeneratedBy,.NDHomePage p{text-align:center}.HFrame{padding:4em 5em .5em 5em}.HContent{max-width:28em;margin:0 auto 3em auto;padding:1.5em 2em;overflow:hidden;background-color:#FFFFFF;border-width:.5ex;border-style:solid;border-color:#E0E0E0 #A0A0A0 #202020 #C0C0C0;-moz-box-shadow:0 .25ex .75ex #383838;-webkit-box-shadow:0 .25ex .75ex #383838;box-shadow:0 .25ex .75ex #383838}.HTitle{font:34pt Georgia,serif;line-height:95%}.HSubtitle{font:16pt Georgia,serif;padding-top:.075em}.HFooter{margin:0 auto;margin-top:2em;border-top:1px solid #A0A0A0;padding-top:2em;font:8pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif}.HFooter div{margin-bottom:.5em;color:#A0A0A0}.HFooter a:link,.HFooter a:visited,.HFooter a:hover,.HFooter a:active{color:#A0A0A0}#NDMessages{background-color:#FFFFF0;z-index:9999;overflow:auto;max-height:33%;display:none;padding:.8ex 1ex 1ex 1ex;border-bottom:3px solid #A0A000;border-left:1px solid #A0A000}#MsgCloseButton{float:right;font:bold 8pt Verdana,sans-serif;color:#000000}a#MsgCloseButton:hover,a#MsgCloseButton:active{text-decoration:none}.MsgMessage{color:#787800;font:italic 8pt Verdana,sans-serif}.MsgMessage ~ .MsgMessage{padding-top:.9ex;border-top:1px dashed #D0D0C8;margin-top:1.2ex}.IE6 .MTab{border-bottom:0px none}.IE6 #MContent .Selected{background-color:#FFFFFF}.IE6 .NDPrototype .PModifierQualifier,.IE6 .NDPrototype .PType{font:10pt Consolas,"Courier New",monospace;padding:0;border-bottom:0px none}.IE6 .CTopic p,.IE6 .CTopic .CTitle,.IE6 .NDClassPrototype .CPName{color:#000000}.IE6 .NDClassPrototype .CPEntry{margin-top:0}.IE6 .SeEntry{border-bottom:0px none;padding:.2ex 1.25ex .2ex 3.25ex;margin:0;font:10pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif}.IE6 .SeChildren .SeEntry{padding-left:5.5ex}.IE6 #SeSelectedEntry{border-style:solid;border-width:1px} \ No newline at end of file diff --git a/Docs/styles/Default/images/menu-folder-arrow.png b/Docs/styles/Default/images/menu-folder-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..7aec69cf61096371f34ab45df744161eb6cc8935 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ;0V1_0*t`W&k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XG(BA$LpZJ{dw6(UU`}Ey;Zgd>{E@AM)u8kL3$6>Q2|F4W f@U1CJC>3Q0vUKQpq9dyT)WqQF>gTe~DWM4f_4g*T literal 0 HcmV?d00001 diff --git a/Docs/styles/Default/images/menu-loading.gif b/Docs/styles/Default/images/menu-loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..d8d06082d06dae6afd1ab85971fd5c7f97a48bfa GIT binary patch literal 2087 zcmb7^SyK~f6owPhExlwT30X*tvM8v5umlK8Sj4EPxB!ZxBPz}e3=C+wpp;q}kp8+6 z)6me$*b-K8D_1}*_l3XUzLZzC>mrpFfX|j=p&DVsdiw z!-o$yZrt$u{S-y{e7=s3j@jASBS(%54GkSSbm+{PGrhgNr%s(>7{={(pF4N1s;Vj} zDe1(C6L!0OaB%SG(W5Sx3&(MlN_G7B@rH(m#>U3V%F1WYo(&8P+`M^H5QLK_PhP%! z`ND+@4<9~!^ym=);L@c_3SlozAAFrg!h&Su7TvPIu+X6|dKO`t)f8LF()4Js!{4*w~#rcV=d0 z`uh5g9Xs~+?c2kL4+jE)$B!RBfByXT?c29*-Rke}pPHItS$1S(q`A5I<;#~m&vP6% zH#c|j;>9OVo?O3veR_JjwYBx>)2E%Cof8uickkY9Z*Q0V&nNL8a5ReQOGDD>pDw=-Y&Tu>7!!$xj}y5&)7kkFd`@xA?V1& z)bu3!N3g-7Py-~`Kwx5*fu2@r59OJLguYmlUxF_NmDW&rHUvlBpSAE%`F7AL_)46T2*N&QQ`GkOM#xS zSc{@m;RXZVx?zLa0Jh^s^ZJM?O>hw_e44sC4cw#xK@`T#oA=XTky@>)W7|0j;SXqj z+rL9#RI11|hG^Vs#UYL6Un5SZljNS#98#)^xB zG-0x$WCj~d=S51S`rAsr*SPw_( zc?;H7-6P=E%t&2BH0p4maB@5?4X<}PchSI*np)ssTR19>H=@7p!UV=#5UKYLi6Aj z%Yp~u<57K5l7R;9ganU;wQ^KEUxQ~FiUg+2BlUokCTz9^4`{WRec7^d8fa5eHrm)+ zjv7jl6BXs62Z}dJJs_n?lWD;NN+s5~YE>K!wyju^XJQX>l#<^^{uC#Az?moYfRx5W zD(C^R3*=}3dnnm`9A)AUVj?IoVhf3b!f0_~NW(vXGt&Uh?@y6)l#S2D#GwU796t(; zirWgRC~gn#iw1Ca@oWu8S$HcdE=*v=)kUL4-5?EBgqqO+>gQLgILgSIMX`DWC|eXd zbUmSip!y3A^2=j`4uYabI>;#My>L3?e9*PfuX~ zz(j_pO{eFq86Kqnwn5Dm-4Oye|~-r2h;=%n$nJ!WcE+klisx9F=g-t&WSICo W@u79bx#vK`89ZJ6T-G@yGywocq&Qmu literal 0 HcmV?d00001 diff --git a/Docs/styles/Default/images/menu-tab-database.png b/Docs/styles/Default/images/menu-tab-database.png new file mode 100644 index 0000000000000000000000000000000000000000..01f610829886acbfba9d56300d3e29a34a3555fe GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X>^xl@Lo7}wSA2ND$gDb}QH@PSMdi=&woW64=}s|4F4@PH zvaP=SF;gvrVWELUDI=qJz#P66lZ4pa)09}58Fovzyxjfx#1x=O44$rjF6*2Ung9-F BFZcie literal 0 HcmV?d00001 diff --git a/Docs/styles/Default/images/menu-tab-files.png b/Docs/styles/Default/images/menu-tab-files.png new file mode 100644 index 0000000000000000000000000000000000000000..ebe763ddf3b7e9e054282c1137bffea4f37276f5 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X%spKkLo7}wSA2ND$gDaeu|RUdgb5$yB`2panDM?~OEQ*O upA@t0kx4^DeZQ20H?zmVW)uAh&5Rdkc71)hDE$!72nJ7AKbLh*2~7a}0x!`3 literal 0 HcmV?d00001 diff --git a/Docs/styles/Default/images/search-class.png b/Docs/styles/Default/images/search-class.png new file mode 100644 index 0000000000000000000000000000000000000000..1494838302cc76c8bb70b0f2d04d0c65f3cb0bdd GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CN!3HF~3v%Lt6lZ})WHC@o7=#%aX3dcR3MwRf z1o<*BRH-sBG&D0X{QM83UotS18Za=tN?>5Hn!&&zoeWn68+&FEX<$ZXgZ;ZewE#>>lM^GAOAqyIY$xHS)Y%G(=E%3=oU{r{ht YLA6SV|8mQzXFx84r>mdKI;Vst0FPEMT>t<8 literal 0 HcmV?d00001 diff --git a/Docs/styles/Default/images/search-parent.png b/Docs/styles/Default/images/search-parent.png new file mode 100644 index 0000000000000000000000000000000000000000..54d1a8ddd83c057d2fa4c0237aa862321c04241d GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^>>$j+3?x7IEPn{3_yc@GT!FNMgTvmvdm9=W{{R1f zAY?-?P>8i8$S)Yk{m<}w8(%O`K(fR&q9iy!t)x7$D3!r6B|j-u!8128JvAsbF{QHb zWU38Nk-VpiV+hCfIN!h@O1Ta JS?83{1OR@AGhzS$ literal 0 HcmV?d00001 diff --git a/Docs/styles/Default/images/search.png b/Docs/styles/Default/images/search.png new file mode 100644 index 0000000000000000000000000000000000000000..6edae9fe84c458cc10b9bb5b80b7a7915ad1775b GIT binary patch literal 344 zcmV-e0jK_nP)A`f`0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy`bk7VR5;7+)V~hFKmf<_6Nz{O!r}o8 z7K6kKpk_nGONhb7#AGn{1tb1pkV&6oc+IuY7o#}WU=B0k|%l93fx##!Ydz|my zzD)TwgwPOw62#5T&Ghv2!NI}x_4V%V?$y=R-rnB+{{H3V<@x#f#l^+x>FL?o8BNoJ zgM&_|)8%sI=jW%Sq*yGLxVSimVTy{1tX6ABM@KqUnV&zsd7Yb?l#r-a;STJ7X*AjRKOVY)F%kapF14SZ znjjHTT}z?gs#Pk@@1$P?+r%}t`Zp1LJFosqqiyf*>HR}nOMt$h=#lT(FE1oo%cu+vhvEC+-~*7#amIX=~=w2Dm2ve?9Lr?C~}&T%-_h=GMdfC zqnCw?D!bkI_V(=;c9dg${X$L^lAIj!^P@)}lhK!uUq0slrQIwHFnc?b!;(>4Hk9XSDFt3P?$_XA5qi z3T8|pU@MYIV@U^>3ghN!DP>+a=Ev>Ev;jvH0_MV)be4?f0stwVmeS{O8?X!9Kq2@j z1T~_W0G15n(g9nZmQv|;kYJ1GR8o6oRv} zF)Eg{a=8#co|aPVb>m67-FR{^D+R?YR~q6@K_uq!47IUggh{ z$=nyX6nR>l5+lACJ#OVG5xEtoMCewY5|LYRN`!9ZDG|99r$p#ho)VE;aY}@4sPVmziBz(?-M^|pSRr9?^dtS@UaTTs{R8eG BZwLSY literal 0 HcmV?d00001 diff --git a/Docs/styles/Default/images/transparent.gif b/Docs/styles/Default/images/transparent.gif new file mode 100644 index 0000000000000000000000000000000000000000..f191b280ce91e6cb8c387735c10ef9bc5da6c83b GIT binary patch literal 42 ocmZ?wbhEHbWMp7uXkY+=|Ns9h{$ybUF?B!$NQQxl(S^Yp0J!f4_W%F@ literal 0 HcmV?d00001 diff --git a/Docs/styles/DefaultJS/NDContentPage.js b/Docs/styles/DefaultJS/NDContentPage.js new file mode 100644 index 0000000..14ecb1f --- /dev/null +++ b/Docs/styles/DefaultJS/NDContentPage.js @@ -0,0 +1,12 @@ +/* +This file is part of Natural Docs, which is Copyright © 2003-2018 Code Clear LLC. +Natural Docs is licensed under version 3 of the GNU Affero General Public +License (AGPL). Refer to License.txt or www.naturaldocs.org for the +complete details. + +This file may be distributed with documentation files generated by Natural Docs. +Such documentation is not covered by Natural Docs' copyright and licensing, +and may have its own copyright and distribution terms as decided by its author. +*/ + +"use strict";var NDContentPage=new function(){this.Start=function(){var ieVersion=NDCore.IEVersion();if(ieVersion==undefined||ieVersion>=8){this.CalculateWideFormPrototypeWidths();for(var key in this.wideFormPrototypeWidths){if(this.wideFormPrototypeWidths[key]==0){setTimeout("NDContentPage.Start();",200);return;}}this.ReformatPrototypes();window.onresize=function(){NDContentPage.OnResize();}}this.toolTipHolder=document.createElement("div");this.toolTipHolder.style.display="none";this.toolTipHolder.style.position="fixed";if(ieVersion==6){this.toolTipHolder.style.position="absolute";}this.toolTipHolder.style.zIndex=20;document.body.appendChild(this.toolTipHolder);var ttLocation=location.href;var hashIndex=ttLocation.indexOf('#');if(hashIndex!=-1){ttLocation=ttLocation.substr(0,hashIndex);}ttLocation=ttLocation.substr(0,ttLocation.length-5)+"-ToolTips.js";NDCore.LoadJavaScript(ttLocation);};this.OnResize=function(){if(this.reformatPrototypesTimeout==undefined){this.reformatPrototypesTimeout=setTimeout("NDContentPage.ReformatPrototypes()",200);}};this.GetPrototypeIDNumber=function(element){if(element.id.indexOf("NDPrototype")==0){var id=parseInt(element.id.substr(11),10);if(id!=NaN&&id>0){return id;}}return-1;};this.CalculateWideFormPrototypeWidths=function(){var prototypes=NDCore.GetElementsByClassName(document,"NDPrototype","div");for(var i=0;i=wideFormWidth&&NDCore.HasClass(prototypes[i],"NarrowForm")){NDCore.ChangePrototypeToWideForm(prototypes[i]);}else if(availableWidthdocument.body.offsetWidth){x=document.body.offsetWidth-this.toolTipHolder.offsetWidth-2;if(x<2){x=2;newWidth=document.body.offsetWidth-4;}}NDCore.SetToAbsolutePosition(this.toolTipHolder,x,y,newWidth,undefined);var prototypes=NDCore.GetElementsByClassName(this.toolTipHolder,"NDPrototype","div");if(prototypes.length>0&&NDCore.HasClass(prototypes[0],"WideForm")&&prototypes[0].scrollWidth>prototypes[0].offsetWidth){NDCore.ChangePrototypeToNarrowForm(prototypes[0]);}if(y+this.toolTipHolder.offsetHeight+2>document.body.parentNode.offsetHeight){var newY=linkOffsets.offsetTop-this.toolTipHolder.offsetHeight-scrollParent.scrollTop-5;if(newY>=0){NDCore.SetToAbsolutePosition(this.toolTipHolder,undefined,newY,undefined,undefined);}}this.toolTipHolder.style.visibility="visible";};this.ResetToolTip=function(){if(this.showingToolTip!=undefined){this.toolTipHolder.style.display="none";this.toolTipHolder.style.width=null;this.lastToolTip=this.showingToolTip;this.showingToolTip=undefined;}if(this.toolTipTimeout!=undefined){clearTimeout(this.toolTipTimeout);this.toolTipTimeout=undefined;}};this.wideFormPrototypeWidths={};}; \ No newline at end of file diff --git a/Docs/styles/DefaultJS/NDCore.js b/Docs/styles/DefaultJS/NDCore.js new file mode 100644 index 0000000..a928e52 --- /dev/null +++ b/Docs/styles/DefaultJS/NDCore.js @@ -0,0 +1,12 @@ +/* +This file is part of Natural Docs, which is Copyright © 2003-2018 Code Clear LLC. +Natural Docs is licensed under version 3 of the GNU Affero General Public +License (AGPL). Refer to License.txt or www.naturaldocs.org for the +complete details. + +This file may be distributed with documentation files generated by Natural Docs. +Such documentation is not covered by Natural Docs' copyright and licensing, +and may have its own copyright and distribution terms as decided by its author. +*/ + +"use strict";var NDCore=new function(){this.GetElementsByClassName=function(baseElement,className,tagHint){if(baseElement.getElementsByClassName){return baseElement.getElementsByClassName(className);}if(!tagHint){tagHint="*";}var tagArray=baseElement.getElementsByTagName(tagHint);var matchArray=new Array();var tagIndex=0;var matchIndex=0;while(tagIndex0){newClassName+=element.className.substr(0,index);}if(index+targetClassName.length!=element.className.length){newClassName+=element.className.substr(index+targetClassName.length);}element.className=newClassName;return;}index=element.className.indexOf(targetClassName,index+1);}};this.LoadJavaScript=function(path,id){var script=document.createElement("script");script.src=path;script.type="text/javascript";if(id!=undefined){script.id=id;}document.getElementsByTagName("head")[0].appendChild(script);};this.RemoveScriptElement=function(id){var script=document.getElementById(id);if(this.IEVersion()==6){setTimeout(function(){script.parentNode.removeChild(script);},1);}else{script.parentNode.removeChild(script);}};this.WindowClientWidth=function(){var width=window.innerWidth;if(width===undefined){width=document.documentElement.clientWidth;}return width;};this.WindowClientHeight=function(){var height=window.innerHeight;if(height===undefined){height=document.documentElement.clientHeight;}return height;};this.SetToAbsolutePosition=function(element,x,y,width,height){if(x!=undefined&&element.offsetLeft!=x){element.style.left=x+"px";}if(y!=undefined&&element.offsetTop!=y){element.style.top=y+"px";}if(width!=undefined&&element.offsetWidth!=width){if(!this.pxRegex.test(element.style.width)){element.style.width=width+"px";if(element.offsetWidth!=width){var adjustment=width-element.offsetWidth;element.style.width=(width+adjustment)+"px";}}else{var styleWidth=RegExp.$1;var adjustment=styleWidth-element.offsetWidth;element.style.width=(width+adjustment)+"px";}}if(height!=undefined&&element.offsetHeight!=height){if(!this.pxRegex.test(element.style.height)){element.style.height=height+"px";if(element.offsetHeight!=height){var adjustment=height-element.offsetHeight;element.style.height=(height+adjustment)+"px";}}else{var styleHeight=RegExp.$1;var adjustment=styleHeight-element.offsetHeight;element.style.height=(height+adjustment)+"px";}}};this.GetFullOffsets=function(element){var result={offsetTop:element.offsetTop,offsetLeft:element.offsetLeft};element=element.offsetParent;while(element!=undefined&&element.nodeName!="BODY"){result.offsetTop+=element.offsetTop;result.offsetLeft+=element.offsetLeft;element=element.offsetParent;}return result;};this.NormalizeHash=function(hashString){if(hashString==undefined){return"";}if(hashString.charAt(0)=="#"){hashString=hashString.substr(1);}hashString=decodeURI(hashString);return hashString;};this.IsIE=function(){return(navigator.userAgent.indexOf("MSIE")!=-1||navigator.userAgent.indexOf("Trident")!=-1);};this.IEVersion=function(){var ieIndex=navigator.userAgent.indexOf("MSIE");if(ieIndex!=-1){ieIndex+=5;}else{ieIndex=navigator.userAgent.indexOf("Trident");if(ieIndex!=-1){ieIndex=navigator.userAgent.indexOf("rv:");if(ieIndex!=-1){ieIndex+=3;}}}if(ieIndex!=-1){return parseInt(navigator.userAgent.substr(ieIndex));}else{return undefined;}};this.AddIEClassesToBody=function(){var ieVersion=this.IEVersion();if(ieVersion!=undefined){this.AddClass(document.body,"IE");if(ieVersion>=6&&ieVersion<=8){this.AddClass(document.body,"IE"+ieVersion);}}};this.SupportsOnInput=function(){if(this.IEVersion()==9){return false;}else{return(window.oninput!==undefined);}};this.ChangePrototypeToNarrowForm=function(prototype){var newPrototype=document.createElement("div");newPrototype.id=prototype.id;newPrototype.className=prototype.className;this.RemoveClass(newPrototype,"WideForm");this.AddClass(newPrototype,"NarrowForm");var prePrototypeLines=NDCore.GetElementsByClassName(prototype,"PPrePrototypeLine","div");for(var i=0;i=other.length&&this.substr(0,other.length)==other);};String.prototype.EntityDecode=function(){var output=this;output=output.replace(/</g,"<");output=output.replace(/>/g,">");output=output.replace(/"/g,"\"");output=output.replace(/&/g,"&");return output;};function NDLocation(hashString){this.Constructor=function(hashString){this.hashString=NDCore.NormalizeHash(hashString);if(this.hashString.match(/^File[0-9]*:/)!=null){this.type="File";this.SplitPathAndMember();this.AddFileURLs();}else if(this.hashString.match(/^[A-Z]+Class:/i)!=null){this.type="Class";this.SplitPathAndMember();this.AddClassURLs();}else if(this.hashString.substr(0,9).toLowerCase()=="database:"){this.type="Database";this.SplitPathAndMember();this.AddDatabaseURLs();}else{this.type="Home";this.AddHomeURLs();}};this.SplitPathAndMember=function(){var pathSeparator=this.hashString.indexOf(':');var memberSeparator=this.hashString.indexOf(':',pathSeparator+1);if(memberSeparator==-1){this.path=this.hashString;}else{this.path=this.hashString.substr(0,memberSeparator);this.member=this.hashString.substr(memberSeparator+1);if(this.member==""){this.member=undefined;}}};this.AddHomeURLs=function(){this.contentPage="other/home.html";};this.AddFileURLs=function(){var pathPrefix=this.path.match(/^File([0-9]*):/);var basePath="files"+pathPrefix[1]+"/"+this.path.substr(pathPrefix[0].length);var lastSeparator=basePath.lastIndexOf('/');var filename=basePath.substr(lastSeparator+1);filename=filename.replace(/\./g,'-');basePath=basePath.substr(0,lastSeparator+1)+filename;this.contentPage=basePath+".html";this.summaryFile=basePath+"-Summary.js";this.summaryTTFile=basePath+"-SummaryToolTips.js";if(this.member!=undefined){this.contentPage+='#'+this.member;}};this.AddClassURLs=function(){var pathPrefix=this.path.match(/^([A-Z]+)Class:/i);var basePath="classes/"+pathPrefix[1]+"/"+this.path.substr(pathPrefix[0].length);basePath=basePath.replace(/\.|::/g,"/");this.contentPage=basePath+".html";this.summaryFile=basePath+"-Summary.js";this.summaryTTFile=basePath+"-SummaryToolTips.js";if(this.member!=undefined){this.contentPage+='#'+this.member;}};this.AddDatabaseURLs=function(){var basePath="database/"+this.path.substr(9);basePath=basePath.replace(/\./g,"/");this.contentPage=basePath+".html";this.summaryFile=basePath+"-Summary.js";this.summaryTTFile=basePath+"-SummaryToolTips.js";if(this.member!=undefined){this.contentPage+='#'+this.member;}};this.Constructor(hashString);};if(!Array.prototype.indexOf){Array.prototype.indexOf=function(searchElement){"use strict";if(this==null){throw new TypeError();}var n,k,t=Object(this),len=t.length>>>0;if(len===0){return-1;}n=0;if(arguments.length>1){n=Number(arguments[1]);if(n!=n){n=0;}else if(n!=0&&n!=Infinity&&n!=-Infinity){n=(n>0||-1)*Math.floor(Math.abs(n));}}if(n>=len){return-1;}for(k=n>=0?n:Math.max(len-Math.abs(n),0);k7));if(supportsOnHashChange){window.onhashchange=function(){NDFramePage.OnHashChange();};}if(!supportsOnHashChange||NDCore.IsIE()){this.hashChangePoller={timeoutLength:200,lastHash:location.hash};if(!NDCore.IsIE()||supportsOnHashChange){this.hashChangePoller.Start=function(){this.Poll();};this.hashChangePoller.Stop=function(){if(this.timeoutID!=undefined){clearTimeout(this.timeoutID);this.timeoutID=undefined;}};this.hashChangePoller.Poll=function(){if(location.hash!=this.lastHash){this.lastHash=location.hash;NDFramePage.OnHashChange();}this.timeoutID=setTimeout("NDFramePage.hashChangePoller.Poll()",this.timeoutLength);};}else{this.hashChangePoller.Start=function(){var iframeElement=document.createElement("iframe");iframeElement.title="empty";iframeElement.tabindex=-1;iframeElement.style.display="none";iframeElement.width=0;iframeElement.height=0;iframeElement.src="javascript:0";this.firstRun=true;iframeElement.attachEvent("onload",function(){if(NDFramePage.hashChangePoller.firstRun){NDFramePage.hashChangePoller.firstRun=false;NDFramePage.hashChangePoller.SetHistory(location.hash);NDFramePage.hashChangePoller.Poll();}});document.body.appendChild(iframeElement);this.iframe=iframeElement.contentWindow;document.onpropertychange=function(){if(event.propertyName=="title"){try{NDFramePage.hashChangePoller.iframe.document.title=document.title;}catch(e){}}};};this.hashChangePoller.Stop=function(){};this.hashChangePoller.Poll=function(){var hash=location.hash;var historyHash=this.GetHistory();if(hash!=this.lastHash){this.lastHash=location.hash;this.SetHistory(hash,historyHash);NDFramePage.OnHashChange();}else if(historyHash!=this.lastHash){location.href=location.href.replace(/#.*/,'')+historyHash;}this.timeoutID=setTimeout("NDFramePage.hashChangePoller.Poll()",this.timeoutLength);};this.hashChangePoller.GetHistory=function(){return this.iframe.location.hash;};this.hashChangePoller.SetHistory=function(hash,historyHash){if(hash!=historyHash){this.iframe.document.title=document.title;this.iframe.document.open();this.iframe.document.close();this.iframe.location.hash=hash;}};}this.hashChangePoller.Start();}};this.OnResize=function(){this.UpdateLayout();};this.UpdateLayout=function(){var ieVersion=NDCore.IEVersion();var useSizers=(ieVersion==undefined||ieVersion>=8);var fullWidth=NDCore.WindowClientWidth();var fullHeight=NDCore.WindowClientHeight();var header=document.getElementById("NDHeader");var searchField=document.getElementById("NDSearchField");var footer=document.getElementById("NDFooter");var menu=document.getElementById("NDMenu");var menuSizer=document.getElementById("NDMenuSizer");var summary=document.getElementById("NDSummary");var summarySizer=document.getElementById("NDSummarySizer");var content=document.getElementById("NDContent");var messages=document.getElementById("NDMessages");NDCore.SetToAbsolutePosition(header,0,0,fullWidth,undefined);NDCore.SetToAbsolutePosition(footer,0,undefined,fullWidth,undefined);var headerHeight=header.offsetHeight-1;var footerHeight=footer.offsetHeight;NDCore.SetToAbsolutePosition(footer,undefined,fullHeight-footerHeight,undefined,undefined);var searchMargin=(headerHeight-searchField.offsetHeight)/2;NDCore.SetToAbsolutePosition(searchField,fullWidth-searchField.offsetWidth-searchMargin,searchMargin,undefined,undefined);var remainingHeight=fullHeight-headerHeight-footerHeight;var remainingWidth=fullWidth;var currentX=0;if(this.MenuIsVisible()){menu.style.display="block";NDCore.SetToAbsolutePosition(menu,currentX,headerHeight,undefined,remainingHeight);currentX+=menu.offsetWidth;remainingWidth-=menu.offsetWidth;if(this.desiredMenuWidth==undefined){this.desiredMenuWidth=menu.offsetWidth;}if(useSizers){menuSizer.style.display="block";NDCore.SetToAbsolutePosition(menuSizer,currentX,headerHeight,undefined,remainingHeight);}NDMenu.OnUpdateLayout();}else{menu.style.display="none";menuSizer.style.display="none";}if(this.SummaryIsVisible()){summary.style.display="block";NDCore.SetToAbsolutePosition(summary,currentX,headerHeight,undefined,remainingHeight);currentX+=summary.offsetWidth;remainingWidth-=summary.offsetWidth;if(this.desiredSummaryWidth==undefined){this.desiredSummaryWidth=summary.offsetWidth;}if(useSizers){summarySizer.style.display="block";NDCore.SetToAbsolutePosition(summarySizer,currentX,headerHeight,undefined,remainingHeight);}}else{summary.style.display="none";summarySizer.style.display="none";}NDCore.SetToAbsolutePosition(content,currentX,headerHeight,remainingWidth,remainingHeight);NDCore.SetToAbsolutePosition(messages,currentX,0,remainingWidth,undefined);NDSearch.OnUpdateLayout();};this.MenuIsVisible=function(){return true;};this.SummaryIsVisible=function(){return(this.currentLocation!=undefined&&this.currentLocation.summaryFile!=undefined);};this.OnMouseDown=function(event){if(event==undefined){event=window.event;}var target=event.target||event.srcElement;if(NDSearch.SearchFieldIsActive()){var targetIsInResults=false;for(var element=target;element!=undefined;element=element.parentNode){if(element.id=="NDSearchResults"){targetIsInResults=true;break;}}if(!targetIsInResults){NDSearch.ClearResults();NDSearch.DeactivateSearchField();}}if(target.id=="NDMenuSizer"||target.id=="NDSummarySizer"){var element;if(target.id=="NDMenuSizer"){element=document.getElementById("NDMenu");}else{element=document.getElementById("NDSummary");}this.sizerDragging={"sizer":target,"element":element,"originalSizerX":target.offsetLeft,"originalElementWidth":element.offsetWidth,"originalClientX":event.clientX};NDCore.AddClass(target,"Dragging");document.onmousemove=function(e){return NDFramePage.OnSizerMouseMove(e);};document.onmouseup=function(e){return NDFramePage.OnSizerMouseUp(e);};document.onselectstart=function(){return false;};var contentCover=document.createElement("div");contentCover.id="NDContentCover";document.body.appendChild(contentCover);NDCore.SetToAbsolutePosition(contentCover,0,0,NDCore.WindowClientWidth(),NDCore.WindowClientHeight());return false;}else{return true;}};this.OnSizerMouseMove=function(event){if(event==undefined){event=window.event;}var offset=event.clientX-this.sizerDragging.originalClientX;var windowClientWidth=NDCore.WindowClientWidth();if(this.sizerDragging.sizer.id=="NDMenuSizer"){if(this.sizerDragging.originalSizerX+offset<0){offset=0-this.sizerDragging.originalSizerX;}else if(this.sizerDragging.originalSizerX+offset+this.sizerDragging.sizer.offsetWidth>windowClientWidth){offset=windowClientWidth-this.sizerDragging.sizer.offsetWidth-this.sizerDragging.originalSizerX;}}else{var menuSizer=document.getElementById("NDMenuSizer");var leftLimit=menuSizer.offsetLeft+menuSizer.offsetWidth;if(this.sizerDragging.originalSizerX+offsetwindowClientWidth){offset=windowClientWidth-this.sizerDragging.sizer.offsetWidth-this.sizerDragging.originalSizerX;}}NDCore.SetToAbsolutePosition(this.sizerDragging.sizer,this.sizerDragging.originalSizerX+offset,undefined,undefined,undefined);NDCore.SetToAbsolutePosition(this.sizerDragging.element,undefined,undefined,this.sizerDragging.originalElementWidth+offset,undefined);if(this.sizerDragging.sizer.id=="NDMenuSizer"){this.desiredMenuWidth=document.getElementById("NDMenu").offsetWidth;}else{this.desiredSummaryWidth=document.getElementById("NDSummary").offsetWidth;}this.UpdateLayout();};this.OnSizerMouseUp=function(event){document.onmousemove=null;document.onmouseup=null;document.onselectstart=null;document.body.removeChild(document.getElementById("NDContentCover"));NDCore.RemoveClass(this.sizerDragging.sizer,"Dragging");this.sizerDragging=undefined;};this.SizeSummaryToContent=function(){this.SizePanelToContent(document.getElementById("NDSummary"),this.desiredSummaryWidth);};this.SizePanelToContent=function(panel,desiredOffsetWidth){if(this.desiredSummaryWidth==undefined){return;}var resized=false;if(panel.clientWidth==panel.scrollWidth){if(panel.offsetWidth==desiredOffsetWidth){return;}else{NDCore.SetToAbsolutePosition(panel,undefined,undefined,desiredOffsetWidth,undefined);resized=true;}}var newOffsetWidth=panel.scrollWidth;if(panel.scrollHeight>panel.clientHeight){newOffsetWidth+=panel.offsetWidth-panel.clientWidth;}else{newOffsetWidth+=NDCore.GetComputedPixelWidth(panel,"borderLeftWidth")+NDCore.GetComputedPixelWidth(panel,"borderRightWidth");}if(newOffsetWidth!=desiredOffsetWidth){newOffsetWidth+=3;if(newOffsetWidth/desiredOffsetWidth>1.333){newOffsetWidth=Math.floor(desiredOffsetWidth*1.333);}if(panel.offsetWidth!=newOffsetWidth){NDCore.SetToAbsolutePosition(panel,undefined,undefined,newOffsetWidth,undefined);resized=true;}}if(resized){this.UpdateLayout();}};}; \ No newline at end of file diff --git a/Docs/styles/DefaultJS/NDMenu.js b/Docs/styles/DefaultJS/NDMenu.js new file mode 100644 index 0000000..383bfee --- /dev/null +++ b/Docs/styles/DefaultJS/NDMenu.js @@ -0,0 +1,12 @@ +/* +This file is part of Natural Docs, which is Copyright © 2003-2018 Code Clear LLC. +Natural Docs is licensed under version 3 of the GNU Affero General Public +License (AGPL). Refer to License.txt or www.naturaldocs.org for the +complete details. + +This file may be distributed with documentation files generated by Natural Docs. +Such documentation is not covered by Natural Docs' copyright and licensing, +and may have its own copyright and distribution terms as decided by its author. +*/ + +"use strict";var NDMenu=new function(){this.Start=function(){this.menuSections=[];this.firstUnusedMenuSection=0;var menuContainer=document.getElementById("NDMenu");var menuTabBar=document.createElement("div");menuTabBar.id="MTabBar";menuContainer.appendChild(menuTabBar);var menuContent=document.createElement("div");menuContent.id="MContent";menuContainer.appendChild(menuContent);NDCore.LoadJavaScript("menu/tabs.js","NDMenuTabsLoader");};this.OnLocationChange=function(oldLocation,newLocation){if(newLocation.type=="Home"&&this.tabs!=undefined&&this.tabs.length==1){this.GoToOffsets([0]);return;}if(oldLocation==undefined||oldLocation.type!=newLocation.type){this.UpdateTabs(newLocation.type);}if(oldLocation==undefined||oldLocation.type!=newLocation.type||oldLocation.path!=newLocation.path){this.Build(new NDMenuHashPath(newLocation.type,newLocation.path));}};this.GoToOffsets=function(offsets){if(this.tabs!=undefined){var newSelectedTab;if(offsets.length>=1){newSelectedTab=this.tabs[offsets[0]][0];if(newSelectedTab!=this.selectedTabType){this.UpdateTabs(newSelectedTab);}}}this.Build(new NDMenuOffsetPath(offsets));};this.Build=function(path){if(path!=undefined){this.pathBeingBuilt=path;}else if(this.pathBeingBuilt==undefined){return;}this.firstUnusedMenuSection=0;var newMenuContent=document.createElement("div");newMenuContent.id="MContent";var result;if(this.tabs!=undefined){result=this.BuildEntries(newMenuContent,this.pathBeingBuilt);}else{result={completed:false};}if(!result.completed){var htmlEntry=document.createElement("div");htmlEntry.className="MLoadingNotice";newMenuContent.appendChild(htmlEntry);}var oldMenuContent=document.getElementById("MContent");var menuContainer=oldMenuContent.parentNode;menuContainer.replaceChild(newMenuContent,oldMenuContent);if(NDCore.IsIE()&&NDCore.IEVersion()==10){setTimeout(function(){document.getElementById("NDMenu").style.zoom="100%";},0);}if(result.completed){if(result.selectedFile){if(result.selectedFile.offsetTop+result.selectedFile.offsetHeight>menuContainer.scrollTop+menuContainer.clientHeight){result.selectedFile.scrollIntoView(false);}else if(result.selectedFile.offsetTop"+""+""+tabTitle+"";htmlMenu.appendChild(htmlEntry);}}else{for(var i=0;i";if(typeof(member[1])=="object"){title+=member[1][0];}else{title+=member[1];}var targetPath=(pathSoFar.length==0?i:pathSoFar.join(",")+","+i);var htmlEntry=document.createElement("a");htmlEntry.className="MEntry MFolder Child";htmlEntry.setAttribute("href","javascript:NDMenu.GoToOffsets(["+targetPath+"])");htmlEntry.innerHTML=title;htmlMenu.appendChild(htmlEntry);}}}result.completed=true;if(selectedTab!=undefined){selectedTab[6]=pathSoFar;}return result;};this.MenuSection=function(file){for(var i=0;i=this.firstUnusedMenuSection){if(i>this.firstUnusedMenuSection){this.menuSections.splice(i,1);this.menuSections.splice(this.firstUnusedMenuSection,0,section);}this.firstUnusedMenuSection++;}if(section.ready==true){return section.contents;}else{return undefined;}}}return undefined;};this.LoadMenuSection=function(file){for(var i=0;i10){for(var i=this.menuSections.length-1;i>=this.firstUnusedMenuSection&&this.menuSections.length>10;i--){if(this.menuSections[i].ready==false){break;}this.menuSections.pop();}}};this.OnTabsLoaded=function(tabs){this.tabs=tabs;NDCore.RemoveScriptElement("NDMenuTabsLoader");var tabBar=document.getElementById("MTabBar");for(var i=0;i"+tabTitle+"";tab.style.position="absolute";tab.style.visibility="hidden";tabBar.appendChild(tab);tabs[i][4]=tab.offsetWidth;tab.className="MTab Narrow";tabs[i][5]=tab.offsetWidth;if(tabs[i][0]==this.selectedTabType){tab.className+=" Selected";}}this.ResizeTabs();if(this.ShouldTabsShow()==false){tabBar.style.display="none";}for(var i=0;i1&&this.selectedTabType!=undefined&&this.selectedTabType!="Home");};this.OnUpdateLayout=function(){this.ResizeTabs();};this.GoToTab=function(newTabType){var tabIndex;for(var i=0;i=this.pathObject.path.length){return;}else if(this.currentContainer==undefined){this.pathIndex++;}else{var currentEntry=this.currentContainer[this.pathObject.path[this.pathIndex]];this.currentContainer=undefined;this.currentContainerHashPath=undefined;this.needToLoad=undefined;if(this.pathIndex==0){this.currentContainerHashPath=currentEntry[2];this.needToLoad=currentEntry[3];}else if(currentEntry[0]==2){this.currentContainerHashPath=currentEntry[2];if(typeof currentEntry[3]=="string"){this.needToLoad=currentEntry[3];}else{this.currentContainer=currentEntry[3];}}this.pathIndex++;if(this.needToLoad!=undefined){this.currentContainer=NDMenu.MenuSection(this.needToLoad);if(this.currentContainer!=undefined){this.needToLoad=undefined;}}}};this.NavigationType=function(){if(this.currentContainer==undefined){return 9;}if(this.pathIndex>=this.pathObject.path.length){return-1;}var currentEntry=this.currentContainer[this.pathObject.path[this.pathIndex]];if(this.InTabs()==false&¤tEntry[0]==1){return 3;}if(this.pathIndex==this.pathObject.path.length-1){return 2;}if(this.pathIndex+2<=this.pathObject.path.length-1){return 1;}var lookahead=this.Duplicate();lookahead.Next();if(lookahead.NavigationType()==9){this.needToLoad=lookahead.NeedToLoad();return 9;}else if(lookahead.CurrentEntry()[0]==2){return 1;}else{return 2;}};this.Duplicate=function(){var newObject=new NDMenuOffsetPathIterator(this.pathObject);newObject.pathIndex=this.pathIndex;newObject.currentContainer=this.currentContainer;newObject.needToLoad=this.needToLoad;return newObject;};this.CurrentEntry=function(){if(this.currentContainer!=undefined&&this.pathIndex0){this.domResults.scrollTop--;}};this.LoadMoreResults=function(){this.moreResultsThreshold=this.visibleEntryCount+25;this.domSearchField.focus();this.Update();};this.ActivateLinkFromKeyboard=function(domLink){var address=domLink.getAttribute("href");if(address.substr(0,11)=="javascript:"){address=address.substr(11);address=address.replace(/^(NDSearch.ToggleParent\([0-9]+,)false(.*)$/,"$1true$2");eval(address);}else{location.href=address;}};this.OnSearchFieldFocus=function(){if(!this.SearchFieldIsActive()){this.ActivateSearchField();if(this.allPrefixesStatus==1){this.allPrefixesStatus=2;NDCore.LoadJavaScript("search/index.js");}}};this.OnSearchFieldKey=function(event){if(event===undefined){event=window.event;}if(event.keyCode==27){this.ClearResults();this.DeactivateSearchField();document.getElementById("CFrame").contentWindow.focus();}else if(event.keyCode==38){if(this.keyboardSelectionIndex<=0){this.keyboardSelectionIndex=this.visibleEntryCount-1;}else{this.keyboardSelectionIndex--;}this.UpdateSelection();}else if(event.keyCode==40){if(this.visibleEntryCount==0){this.keyboardSelectionIndex=-1;}else if(this.keyboardSelectionIndex>=this.visibleEntryCount-1){this.keyboardSelectionIndex=0;}else{this.keyboardSelectionIndex++;}this.UpdateSelection();}else if(event.keyCode==37){if(this.keyboardSelectionIndex!=-1){var domSelectedEntry=document.getElementById("SeSelectedEntry");if(NDCore.HasClass(domSelectedEntry,"SeParent")&&NDCore.HasClass(domSelectedEntry,"open")){this.ActivateLinkFromKeyboard(domSelectedEntry);}}}else if(event.keyCode==39){if(this.keyboardSelectionIndex!=-1){var domSelectedEntry=document.getElementById("SeSelectedEntry");if(NDCore.HasClass(domSelectedEntry,"SeParent")&&NDCore.HasClass(domSelectedEntry,"closed")){this.ActivateLinkFromKeyboard(domSelectedEntry);}}}else if(event.keyCode==13){var domSelectedEntry=undefined;if(this.keyboardSelectionIndex!=-1){domSelectedEntry=document.getElementById("SeSelectedEntry");}else if(this.visibleEntryCount==1){domSelectedEntry=this.domResultsContent.firstChild;}else if(this.visibleEntryCount==2&&NDCore.HasClass(this.domResultsContent.firstChild,"SeParent")){domSelectedEntry=this.domResultsContent.childNodes[1].firstChild;}if(domSelectedEntry!=undefined){this.ActivateLinkFromKeyboard(domSelectedEntry);}else if(this.keyboardSelectionIndex==-1&&this.visibleEntryCount>0){this.keyboardSelectionIndex=0;this.UpdateSelection();}}else if(NDCore.SupportsOnInput()==false){if(event.keyCode!=37&&event.keyCode!=39){this.OnSearchFieldChange(event);}}};this.OnSearchFieldChange=function(event){if(event===undefined){event=window.event;}this.keyboardSelectionIndex=-1;if(this.initialTimeoutStatus==3){if(this.updateTimeout==undefined){this.updateTimeout=setTimeout(function(){clearTimeout(NDSearch.updateTimeout);NDSearch.updateTimeout=undefined;NDSearch.Update();},350);}}else{var searchInterpretations=this.GetSearchInterpretations();if(searchInterpretations.length!=0&&this.allPrefixesStatus==3&&this.GetMatchingPrefixes(searchInterpretations).length<=1){if(this.initialTimeoutStatus==2){clearTimeout(this.initialTimeout);this.initialTimeout=undefined;}this.initialTimeoutStatus=3;this.Update();}else if(this.initialTimeoutStatus==1){this.initialTimeoutStatus=2;this.initialTimeout=setTimeout(function(){if(NDSearch.initialTimeoutStatus==2){clearTimeout(NDSearch.initialTimeout);NDSearch.initialTimeout=undefined;NDSearch.initialTimeoutStatus=3;NDSearch.Update();}},1250);}}};this.OnResultsFocus=function(){this.domSearchField.focus();};this.OnUpdateLayout=function(){if(this.domResults!=undefined){this.PositionResults();if(this.keyboardSelectionIndex!=-1){var domSelectedEntry=document.getElementById("SeSelectedEntry");if(domSelectedEntry!=undefined){this.ScrollEntryIntoView(domSelectedEntry,false);}}}};this.GetSearchInterpretations=function(){var interpretations=[];var normalizedSearchText=this.domSearchField.value.toLowerCase();normalizedSearchText=normalizedSearchText.replace(/\s+/g," ");normalizedSearchText=normalizedSearchText.replace(/^ /,"");normalizedSearchText=normalizedSearchText.replace(/ $/,"");normalizedSearchText=normalizedSearchText.replace(/([^a-z0-9_]) /g,"$1");normalizedSearchText=normalizedSearchText.replace(/ (?=[^a-z0-9_])/g,"");normalizedSearchText=normalizedSearchText.replace(/::|->/g,".");normalizedSearchText=normalizedSearchText.replace(/\\/g,"/");normalizedSearchText=normalizedSearchText.replace(/^[./]+/,"");if(normalizedSearchText==""){return interpretations;}interpretations.push(normalizedSearchText);var lastChar=normalizedSearchText.charAt(normalizedSearchText.length-1);if(lastChar==":"||lastChar=="-"){interpretations.push(normalizedSearchText.substr(0,normalizedSearchText.length-1)+".");}return interpretations;};this.GetMatchingPrefixes=function(searchTextArray){var matchingPrefixes=[];if(this.allPrefixesStatus!=3){return matchingPrefixes;}for(var i=0;i=searchPrefix.length&&this.allPrefixes[prefixIndex].substr(0,searchPrefix.length)==searchPrefix){matchingPrefixes.push(this.allPrefixes[prefixIndex]);prefixIndex++;}else{break;}}}}if(searchTextArray.length<=1){return matchingPrefixes;}matchingPrefixes.sort();for(var i=1;i>1;if(prefix==this.allPrefixes[testIndex]){return testIndex;}else if(prefixmaximum){return true;}}}}}}return false;};this.BuildResults=function(searchInterpretations,searchInterpretationPrefixes,favorClasses,forceExpansion){var results={html:""};this.topLevelEntryCount=0;this.visibleEntryCount=0;var addSearchingStatus=false;for(var p=0;p"+"
"+lastMatchingMemberObject[1];if(lastMatchingMemberObject[0]!=undefined||lastMatchingMemberObject[2]!=undefined){html+="";if(lastMatchingMemberObject[0]!=undefined){html+=", "+lastMatchingMemberObject[0];}if(lastMatchingMemberObject[2]!=undefined){html+=", "+lastMatchingMemberObject[2];}html+="";}html+="";this.topLevelEntryCount++;this.visibleEntryCount++;return html;}else{var selected=(this.keyboardSelectionIndex==this.visibleEntryCount);var openClosed;if(forceExpansion||this.openParents.indexOf(this.topLevelEntryCount)!=-1){openClosed="open";}else{openClosed="closed";}var html=""+"
"+keywordObject[0]+" ("+memberMatches+")"+"
";this.topLevelEntryCount++;this.visibleEntryCount++;if(openClosed=="open"){html+="
";for(var i=0;i"+"
"+memberObject[1];if(memberObject[0]!=undefined||memberObject[2]!=undefined){html+="";if(memberObject[0]!=undefined){html+=", "+memberObject[0];}if(memberObject[2]!=undefined){html+=", "+memberObject[2];}html+="";}html+="";this.visibleEntryCount++;}}html+="
";}return html;}};this.BuildSearchingStatus=function(){return"
"+"Searching..."+"
";};this.BuildNoMatchesStatus=function(){return"
"+"No Matches"+"
";};this.BuildMoreResultsEntry=function(){var selected=(this.keyboardSelectionIndex==this.visibleEntryCount);var html=""+"
"+"More Results..."+"
";this.visibleEntryCount++;this.topLevelEntryCount++;return html;};this.MakePrefix=function(searchText){var prefix="";for(var i=0;i<3;i++){if(i>=searchText.length){break;}var char=searchText.charAt(i);if(char==" "||char=="."||char=="/"){break;}prefix+=char;}if(prefix.length>0){return prefix;}else{return undefined;}};this.PrefixToHex=function(prefix){var hex="";for(var i=0;imaxHeight){NDCore.SetToAbsolutePosition(this.domResults,undefined,undefined,undefined,maxHeight);}if(this.domResults.offsetWidth>maxWidth){NDCore.SetToAbsolutePosition(this.domResults,undefined,undefined,maxWidth,undefined);}else{if(this.domResults.scrollWidth>this.domResults.clientWidth){var newWidth=this.domResults.offsetWidth+(this.domResults.scrollWidth-this.domResults.clientWidth)+5;if(newWidth>maxWidth){newWidth=maxWidth;}NDCore.SetToAbsolutePosition(this.domResults,undefined,undefined,newWidth,undefined);}if(this.domResults.offsetWidthitemTop){offset=itemTop-windowTop;}if(offset!=0){this.domResults.scrollTop+=offset;}};this.OnPrefixIndexLoaded=function(prefixes){this.allPrefixes=prefixes;this.allPrefixesStatus=3;if(this.initialTimeoutStatus==3){this.Update();}};this.LoadPrefixData=function(prefix){if(this.prefixObjects[prefix]==undefined){var prefixObject=[];prefixObject[0]=prefix;prefixObject[2]=false;prefixObject[3]="NDPrefixLoader_"+this.PrefixToHex(prefix);this.prefixObjects[prefix]=prefixObject;NDCore.LoadJavaScript(this.PrefixToDataFile(prefix),prefixObject[3]);}};this.OnPrefixDataLoaded=function(prefix,commentTypes,keywordObjects){var prefixObject=this.prefixObjects[prefix];if(prefixObject==undefined){return;}for(var k=0;k"+entry[3];entryHTML.onmouseover=mouseOverHandler;entryHTML.onmouseout=mouseOutHandler;var entryHTMLChild=entryHTML.firstChild;if(entryHTMLChild!=undefined&&NDCore.HasClass(entryHTMLChild,"Qualifier")){entryHTMLChild.onmouseover=mouseOverHandler;entryHTMLChild.onmouseout=mouseOutHandler;}newContent.appendChild(entryHTML);}}}var summaryContainer=document.getElementById("NDSummary");var oldContent=document.getElementById("SuContent");if(oldContent!=undefined){summaryContainer.replaceChild(newContent,oldContent);}else{summaryContainer.appendChild(newContent);}newContent.scrollIntoView(true);if(this.summaryEntries!=undefined){NDFramePage.SizeSummaryToContent();}if(NDCore.IsIE()&&NDCore.IEVersion()==10){setTimeout(function(){document.getElementById("NDSummary").style.zoom="100%";},0);}};this.FinishIENavigation=function(){if(NDCore.IsIE()&&this.summaryEntries!=undefined&&NDFramePage.currentLocation!=undefined&&NDFramePage.currentLocation.type=="File"&&NDFramePage.currentLocation.member!=undefined){var topicID=-1;for(var i=0;i0){return id;}else{return-1;}};this.ShowToolTip=function(){var entry=document.getElementById("SuEntry"+this.showingToolTip);this.toolTipHolder.innerHTML=this.summaryToolTips[this.showingToolTip];this.toolTipHolder.style.visibility="hidden";this.toolTipHolder.style.display="block";var summaryBlock=document.getElementById("NDSummary");var x=summaryBlock.offsetLeft+entry.offsetLeft+entry.offsetWidth;var y=summaryBlock.offsetTop+entry.offsetTop-summaryBlock.scrollTop;var newWidth=undefined;var maxWidth=NDCore.WindowClientWidth()-x;if(this.toolTipHolder.offsetWidth>maxWidth){newWidth=maxWidth;}NDCore.SetToAbsolutePosition(this.toolTipHolder,x,y,newWidth,undefined);var prototypes=NDCore.GetElementsByClassName(this.toolTipHolder,"NDPrototype","div");if(prototypes.length>0&&NDCore.HasClass(prototypes[0],"WideForm")&&prototypes[0].scrollWidth>prototypes[0].offsetWidth){NDCore.ChangePrototypeToNarrowForm(prototypes[0]);}var footer=document.getElementById("NDFooter");if(y+this.toolTipHolder.offsetHeight+(footer.offsetHeight*2)>NDCore.WindowClientHeight()){var newY=NDCore.WindowClientHeight()-this.toolTipHolder.offsetHeight-(footer.offsetHeight*2);if(newY<0){newY=0;}NDCore.SetToAbsolutePosition(this.toolTipHolder,undefined,newY,undefined,undefined);}this.toolTipHolder.style.visibility="visible";};this.ResetToolTip=function(){if(this.showingToolTip!=undefined){this.toolTipHolder.style.display="none";this.toolTipHolder.style.width=null;this.lastToolTip=this.showingToolTip;this.showingToolTip=undefined;}if(this.toolTipTimeout!=undefined){clearTimeout(this.toolTipTimeout);this.toolTipTimeout=undefined;}};}; \ No newline at end of file diff --git a/Docs/styles/main.css b/Docs/styles/main.css new file mode 100644 index 0000000..4333a29 --- /dev/null +++ b/Docs/styles/main.css @@ -0,0 +1 @@ +@import URL("Default/Default.css"); \ No newline at end of file diff --git a/Docs/styles/main.js b/Docs/styles/main.js new file mode 100644 index 0000000..e47a88e --- /dev/null +++ b/Docs/styles/main.js @@ -0,0 +1 @@ +"use strict";var NDLoader=new function(){this.JSLinks_All=["DefaultJS/NDCore.js"];this.JSLinks_Frame=["DefaultJS/NDFramePage.js","DefaultJS/NDMenu.js","DefaultJS/NDSummary.js","DefaultJS/NDSearch.js"];this.JSLinks_Content=["DefaultJS/NDContentPage.js"];this.JSLinks_Home=[];this.LoadJS=function(pageType,relativePrefix){this.LoadJSArray(this.JSLinks_All,relativePrefix);this.LoadJSArray(this['JSLinks_'+pageType],relativePrefix);};this.LoadJSArray=function(links,relativePrefix){if(navigator.userAgent.indexOf('KHTML')!=-1){for(var i=0;i');}}else{var head=document.getElementsByTagName('head')[0];for(var i=0;i Date: Mon, 27 May 2019 19:05:51 +0530 Subject: [PATCH 7/9] Change Documentation Format The documentation is done sing docstring instead of normal multi line strings.the documentaiion is now acording to the formats using for sphinx. --- server.py | 348 ++++++++++++++++++++++++++---------------------------- 1 file changed, 167 insertions(+), 181 deletions(-) diff --git a/server.py b/server.py index d4017f8..0986225 100644 --- a/server.py +++ b/server.py @@ -12,27 +12,26 @@ db = SqliteDatabase(DATABASE_NAME) -""" -Class: User - Defines username and password for individual user. -""" class User(Model): + """ + Defines username and password for individual user. + """ username = CharField(unique=True) password = CharField() class Meta: """ - Class : Meta - define the database in the main class + define the database in the main class """ database = db - -""" -Class: Session - Generates randam token for every section - new Token is assigned to every User for every new session -""" + + class Session(Model): + """ + Generates randam token for every section + new Token is assigned to every User for every new session + """ + def random_token(): return "".join([random.choice(string.ascii_letters) for _ in range(20)]) @@ -42,14 +41,14 @@ def random_token(): class Meta: database = db -""" -Class: Contest - Each Contest instance contains:- - Code - Description of contest - Contest start time and End Time -""" + class Contest(Model): + """ + Each Contest instance contains:- + Code + Description of contest + Contest start time and End Time + """ code = CharField(unique=True) description = CharField() start_time = DateTimeField() @@ -58,26 +57,24 @@ class Contest(Model): class Meta: database = db -""" -Class: Question - Each Question has a Question no and a author - associated to it -""" + class Question(Model): + """ + Each Question has a Question no and a author associated to it . + """ q_no = IntegerField(unique=True) author = ForeignKeyField(User) class Meta: database = db -""" -Class: ContestProblems + +class ContestProblems(Model): + """ All contest problems belong to a Contest and are itself a question. contest defines the instance of Contest Class it belongs question defines the questions that belongs to that contest. - -""" -class ContestProblems(Model): + """ contest = ForeignKeyField(Contest, backref="questions") question = ForeignKeyField(Question) @@ -85,16 +82,16 @@ class Meta: database = db indexes = ((("contest", "question"), True),) -""" -Class: Submission - Class defines the submission of solution of a Question + +class Submission(Model): + """ + Submoission classdefines the submission of solution of a Question Stores the information about: User that submits the Solution Time of Submission Contest to whish The question belongs Whether the soolution is correct -""" -class Submission(Model): + """ user = ForeignKeyField(User) time = DateTimeField() contestProblem = ForeignKeyField(ContestProblems) @@ -160,14 +157,17 @@ class Meta: ContestProblems.get_or_create(contest=futureContest[0], question=q6[0]) -""" -Function: login_required - Extends the functainality of a funcion by checking log in condition. - Checks if the user is logged in.if not redirect the user to home page - with message 'Login Required' - parameters : Function on which decorator is applied -""" + def login_required(function): + """ + Extends the functainality of a funcion by checking log in condition. + Checks if the user is logged in.if not redirect the user to home page + with message 'Login Required' + + : param : Function + : type : method + """ + def login_redirect(*args, **kwargs): if not logggedIn(): return bottle.template("home.html", message="Login required.") @@ -176,51 +176,51 @@ def login_redirect(*args, **kwargs): return login_redirect -""" -Function: changePath - redirects to home page -""" + @app.route("/")# Sets the url that trigger following function def changePath(): + """ redirects to home page """ return bottle.redirect("/home") -""" -Function: home - redirects to Dashboard of the user -""" @app.get("/home")# Sets the base url as the argument. def home(): + """ + If Logged in ,redirects to Dashboard of the user + """ if logggedIn(): return bottle.redirect("/dashboard") return bottle.template("home.html", message="") -""" -Function: dashboard - redirects to Dashboard of the user -""" + @app.get("/dashboard")# Sets the base url as the argument. @login_required# Checks if user is logged in or not def dashboard(): + """ + Return the dashboard template to the user + """ contests = Contest.select().order_by(Contest.start_time) return bottle.template("dashboard.html", contests=contests) -""" -Function: question - Checks if the question and Contest it belongs does exists. - If exists : it checks the current status of the contest - And then returns the question state ment along with question numbers - and contest code to the Template - Parameters: - code: Contest Code - number: Question Number - Return: - Question Template -""" + @app.get("/contest//") @login_required def question(code, number): + """ + Checks if the question and Contest it belongs does exists. + If exists : it checks the current status of the contest + And then returns the question state ment along with question numbers + and contest code to the Template + + : paran code : Contest code + : type code: int + : paran Question : Question no + : type Question: int + : return : Html template for Individual Question + + """ + if ( not ContestProblems.select() .where((Contest.code == code) & (Question.q_no == int(number))) @@ -239,18 +239,19 @@ def question(code, number): ) -""" -Function: contest: Function - Checks if contest exists by validating the contest id. - Checks the the current staus of code - Parameters: - code : contest code - Return : - Contest Template -""" + @app.get("/contest/") @login_required def contest(code): + """ + Checks if contest exists by validating the contest id. + Checks the the current staus of code + + : param code : Contest code + : return : Html template for Contest + + """ + try: contest = Contest.get(Contest.code == code) except Contest.DoesNotExist: @@ -260,48 +261,45 @@ def contest(code): return bottle.template("contest.html", contest=contest, questions=contest.questions) -""" -Function: download - Downloads the question to local system - Parameters: - path :path to download from - Return : - Static Files: Downloadable Files -""" + @app.get("/question/") def download(path): + """ + Downloads the question to local system + + : param path : path to download from + :return : Static Files + """ + return bottle.static_file(path, root=question_dir) -""" -Function: server_static - Static files for server - Parameters: - path :path of file - Return : - Static Files -""" + @app.get("/static/") def server_static(filepath): + """ + Static files for server + + : param path : path to download from + :return : Static Files + """ return bottle.static_file(filepath, root=os.path.join(dir_path, "static")) -""" -Function: contest_ranking - Generates rankinks of users in a Contest i.e the Contest results - Validates the Sumbission And Contest - Checks the number of correct submissions for each user and Added to - list with tuples of Username Along with thier Scores . The tuples - are added to list in descending order of the score .Then rankings are - given to each Username in the list. - - Parameters: - code : contest code - Return : - Ranking Template with ranks of different user in a contest. -""" @app.get("/ranking/") def contest_ranking(code): + """ + Generates rankinks of users in a Contest i.e the Contest results + Validates the Sumbission And Contest. + Checks the number of correct submissions for each user and Added to + list with tuples of Username Along with thier Scores . The tuples + are added to list in descending order of the score .Then rankings are + given to each Username in the list. + + + :param code : Contest Code + :return : Html Template For Displaying Rankings + """ order = ( Submission.select( User.username, fn.count(Submission.contestProblem.distinct()).alias("score") @@ -323,16 +321,15 @@ def contest_ranking(code): return bottle.template("rankings.html", people=order) -""" -Function: rankings - Overall Ranking of the user over all the Contest. - Parameters: - None - Return : - Ranking Template with Overall Ranking -""" + @app.get("/ranking") def rankings(): + """ + Overall Ranking of the user over all the Contest. + + :param None + :return : Ranking Template with Overall Ranking + """ order = ( Submission.select( User.username, fn.count(Submission.contestProblem.distinct()).alias("score") @@ -351,17 +348,16 @@ def rankings(): return bottle.template("rankings.html", people=order) -""" -Function: loggedIn - Downloads the question to local system - Parameters: - None - Return : - True: if Session exixsts for the user Logged In - False: if Session not exixst for the user Logged In - or if the s_id is not present or is wrong -""" + def logggedIn(): + """ + Downloads the question to local system + + :param None + :return : True if Session exixsts for the user Logged In + :return : False if Session not exixst for the user Logged In + or if the s_id is not present or is wrong + """ if not bottle.request.get_cookie("s_id"): return False return ( @@ -371,17 +367,15 @@ def logggedIn(): ) -""" -Function: createSession - Create a session for the user - Set up cookie for The current session with seesion id ,token and expiry - time - Parameters: - username: Username of user For whom session is Created. - Return : - Redirects to user Dashoard -""" + def createSession(username): + """ + Create a session for the user. + Set up cookie for The current session with seesion id ,token and expiry time. + + :param username: Username for which session is created + :return : Resicts to dashboard of user + """ try: session = Session.create(user=User.get(User.username == username)) except IntegrityError: @@ -394,18 +388,16 @@ def createSession(username): return bottle.redirect("/dashboard") -""" -Function: login - This function is called whenever user log in to the app - Checks if the user entered the Right credentials for log in - Parameters: - None - Return : - Redirects to home if invalid credenial - Else Creates the session for the user -""" @app.post("/login") def login(): + """ + This function is called whenever user log in to the app + Checks if the user entered the Right credentials for log in + + :param None: + :return : Redirects to home if invalid credenial Else Creates the session for the user + """ + username = bottle.request.forms.get("username") password = bottle.request.forms.get("password") if ( @@ -417,18 +409,17 @@ def login(): return createSession(username) -""" -Function: resgiter - This function is called whenever new user registers - New User is Created in the Data base and his credentials are stored - Checks if the user with same username already exisxts - Parameters: - None - Return : - Creates session for new user. -""" + @app.post("/register") def register(): + """ + This function is called whenever new user registers + New User is Created in the Data base and his credentials are stored + Checks if the user with same username already exisxts + + :param None: + :return : Create session function called for new username. + """ username = bottle.request.forms.get("username") password = bottle.request.forms.get("password") try: @@ -440,36 +431,33 @@ def register(): return createSession(username) -""" -Function: logout - Ends the session for the user - Deletes the session cookie - - Parameters: - None - Return : - Redirects to Home Page -""" + @app.get("/logout") def logout(): + """ + Ends the session for the user on logout + Deletes the session cookie + + : param None: + :return : Redirects to Home Page + """ Session.delete().where(Session.token == bottle.request.get_cookie("s_id")).execute() bottle.response.delete_cookie("s_id") return bottle.redirect("/home") -""" -Function: file_upload - This Function is used to upload the submission to Question to the Server. - Parameters: - code: Contest Code - number : Question No of ehich solution is uploaded - Return : - "Wrong Answer!! : If solution is wrong - "Solved! Great Job! " : If solution is correct -""" + @app.post("/check//") @login_required def file_upload(code, number): + """ + This Function is used to upload the submission to Question to the Server. + + :param code: Contest Code + :param number : Question No of which solution is uploaded + :return : "Wrong Answer!! : If solution is wrong + :return : "Solved! Great Job! " : If solution is correct + """ try: contestProblem = ContestProblems.get( ContestProblems.contest == Contest.get(Contest.code == code), @@ -499,17 +487,15 @@ def file_upload(code, number): return "Solved! Great Job! " -""" -Function: error404 - Handles Error - Parameter: - error : Error rturned the App - Return : - Redirects to - -""" + @app.error(404) # Checks if app returns an error with error code as argument def error404(error): + """ + Handles Error + + :param error : Error rturned the App + :return : Redirects to Template which Display Error + """ return template("error.html", errorcode=error.status_code, errorbody=error.body) From c13deb011270d496f8c13d812c7b52ef4bf13fb5 Mon Sep 17 00:00:00 2001 From: jatinkhemchandani Date: Mon, 27 May 2019 19:36:21 +0530 Subject: [PATCH 8/9] Remove Docs --- Docs/Comments.txt | 75 --------- Docs/Languages.txt | 95 ----------- Docs/Project.txt | 129 --------------- Docs/Working Data/CodeDB.nd | Bin 114688 -> 0 bytes Docs/Working Data/Comments.nd | Bin 4310 -> 0 bytes Docs/Working Data/Files.nd | Bin 3263 -> 0 bytes Docs/Working Data/Languages.nd | Bin 2221 -> 0 bytes Docs/Working Data/Output/BuildState.nd | Bin 95 -> 0 bytes Docs/Working Data/Output/Config.nd | Bin 157 -> 0 bytes Docs/Working Data/Parser.nd | Bin 525 -> 0 bytes Docs/Working Data/Project.nd | Bin 114 -> 0 bytes Docs/Working Data/SearchIndex.nd | Bin 343 -> 0 bytes Docs/classes/Python/Contest-Summary.js | 1 - .../classes/Python/Contest-SummaryToolTips.js | 1 - Docs/classes/Python/Contest-ToolTips.js | 1 - Docs/classes/Python/Contest.html | 17 -- .../classes/Python/ContestProblems-Summary.js | 1 - .../Python/ContestProblems-SummaryToolTips.js | 1 - .../Python/ContestProblems-ToolTips.js | 1 - Docs/classes/Python/ContestProblems.html | 17 -- Docs/classes/Python/Question-Summary.js | 1 - .../Python/Question-SummaryToolTips.js | 1 - Docs/classes/Python/Question-ToolTips.js | 1 - Docs/classes/Python/Question.html | 17 -- Docs/classes/Python/Session-Summary.js | 1 - .../classes/Python/Session-SummaryToolTips.js | 1 - Docs/classes/Python/Session-ToolTips.js | 1 - Docs/classes/Python/Session.html | 17 -- Docs/classes/Python/Submission-Summary.js | 1 - .../Python/Submission-SummaryToolTips.js | 1 - Docs/classes/Python/Submission-ToolTips.js | 1 - Docs/classes/Python/Submission.html | 120 -------------- Docs/classes/Python/User-Summary.js | 1 - Docs/classes/Python/User-SummaryToolTips.js | 1 - Docs/classes/Python/User-ToolTips.js | 1 - Docs/classes/Python/User.html | 17 -- Docs/files/server-py-Summary.js | 1 - Docs/files/server-py-SummaryToolTips.js | 1 - Docs/files/server-py-ToolTips.js | 1 - Docs/files/server-py.html | 150 ------------------ Docs/index.html | 9 -- Docs/menu/classes.js | 1 - Docs/menu/files.js | 1 - Docs/menu/tabs.js | 1 - Docs/other/home.html | 13 -- Docs/search/index.js | 1 - Docs/search/keywords/006300680061.js | 1 - Docs/search/keywords/0063006f006e.js | 1 - Docs/search/keywords/006300720065.js | 1 - Docs/search/keywords/006400610073.js | 1 - Docs/search/keywords/0064006f0077.js | 1 - Docs/search/keywords/006500720072.js | 1 - Docs/search/keywords/00660069006c.js | 1 - Docs/search/keywords/00660075006e.js | 1 - Docs/search/keywords/0068006f006d.js | 1 - Docs/search/keywords/006c006f0067.js | 1 - Docs/search/keywords/007100750065.js | 1 - Docs/search/keywords/00720061006e.js | 1 - Docs/search/keywords/007200650073.js | 1 - Docs/search/keywords/007300650072.js | 1 - Docs/search/keywords/007300650073.js | 1 - Docs/search/keywords/007300750062.js | 1 - Docs/search/keywords/007500730065.js | 1 - Docs/styles/Default/Default.css | 12 -- .../Default/images/menu-folder-arrow.png | Bin 135 -> 0 bytes Docs/styles/Default/images/menu-loading.gif | Bin 2087 -> 0 bytes .../Default/images/menu-tab-classes.png | Bin 175 -> 0 bytes .../Default/images/menu-tab-database.png | Bin 156 -> 0 bytes Docs/styles/Default/images/menu-tab-files.png | Bin 149 -> 0 bytes Docs/styles/Default/images/search-class.png | Bin 185 -> 0 bytes Docs/styles/Default/images/search-parent.png | Bin 169 -> 0 bytes Docs/styles/Default/images/search.png | Bin 344 -> 0 bytes .../styles/Default/images/summary-loading.gif | Bin 3081 -> 0 bytes Docs/styles/Default/images/transparent.gif | Bin 42 -> 0 bytes Docs/styles/DefaultJS/NDContentPage.js | 12 -- Docs/styles/DefaultJS/NDCore.js | 12 -- Docs/styles/DefaultJS/NDFramePage.js | 17 -- Docs/styles/DefaultJS/NDMenu.js | 12 -- Docs/styles/DefaultJS/NDSearch.js | 12 -- Docs/styles/DefaultJS/NDSummary.js | 12 -- Docs/styles/main.css | 1 - Docs/styles/main.js | 1 - 82 files changed, 809 deletions(-) delete mode 100644 Docs/Comments.txt delete mode 100644 Docs/Languages.txt delete mode 100644 Docs/Project.txt delete mode 100644 Docs/Working Data/CodeDB.nd delete mode 100644 Docs/Working Data/Comments.nd delete mode 100644 Docs/Working Data/Files.nd delete mode 100644 Docs/Working Data/Languages.nd delete mode 100644 Docs/Working Data/Output/BuildState.nd delete mode 100644 Docs/Working Data/Output/Config.nd delete mode 100644 Docs/Working Data/Parser.nd delete mode 100644 Docs/Working Data/Project.nd delete mode 100644 Docs/Working Data/SearchIndex.nd delete mode 100644 Docs/classes/Python/Contest-Summary.js delete mode 100644 Docs/classes/Python/Contest-SummaryToolTips.js delete mode 100644 Docs/classes/Python/Contest-ToolTips.js delete mode 100644 Docs/classes/Python/Contest.html delete mode 100644 Docs/classes/Python/ContestProblems-Summary.js delete mode 100644 Docs/classes/Python/ContestProblems-SummaryToolTips.js delete mode 100644 Docs/classes/Python/ContestProblems-ToolTips.js delete mode 100644 Docs/classes/Python/ContestProblems.html delete mode 100644 Docs/classes/Python/Question-Summary.js delete mode 100644 Docs/classes/Python/Question-SummaryToolTips.js delete mode 100644 Docs/classes/Python/Question-ToolTips.js delete mode 100644 Docs/classes/Python/Question.html delete mode 100644 Docs/classes/Python/Session-Summary.js delete mode 100644 Docs/classes/Python/Session-SummaryToolTips.js delete mode 100644 Docs/classes/Python/Session-ToolTips.js delete mode 100644 Docs/classes/Python/Session.html delete mode 100644 Docs/classes/Python/Submission-Summary.js delete mode 100644 Docs/classes/Python/Submission-SummaryToolTips.js delete mode 100644 Docs/classes/Python/Submission-ToolTips.js delete mode 100644 Docs/classes/Python/Submission.html delete mode 100644 Docs/classes/Python/User-Summary.js delete mode 100644 Docs/classes/Python/User-SummaryToolTips.js delete mode 100644 Docs/classes/Python/User-ToolTips.js delete mode 100644 Docs/classes/Python/User.html delete mode 100644 Docs/files/server-py-Summary.js delete mode 100644 Docs/files/server-py-SummaryToolTips.js delete mode 100644 Docs/files/server-py-ToolTips.js delete mode 100644 Docs/files/server-py.html delete mode 100644 Docs/index.html delete mode 100644 Docs/menu/classes.js delete mode 100644 Docs/menu/files.js delete mode 100644 Docs/menu/tabs.js delete mode 100644 Docs/other/home.html delete mode 100644 Docs/search/index.js delete mode 100644 Docs/search/keywords/006300680061.js delete mode 100644 Docs/search/keywords/0063006f006e.js delete mode 100644 Docs/search/keywords/006300720065.js delete mode 100644 Docs/search/keywords/006400610073.js delete mode 100644 Docs/search/keywords/0064006f0077.js delete mode 100644 Docs/search/keywords/006500720072.js delete mode 100644 Docs/search/keywords/00660069006c.js delete mode 100644 Docs/search/keywords/00660075006e.js delete mode 100644 Docs/search/keywords/0068006f006d.js delete mode 100644 Docs/search/keywords/006c006f0067.js delete mode 100644 Docs/search/keywords/007100750065.js delete mode 100644 Docs/search/keywords/00720061006e.js delete mode 100644 Docs/search/keywords/007200650073.js delete mode 100644 Docs/search/keywords/007300650072.js delete mode 100644 Docs/search/keywords/007300650073.js delete mode 100644 Docs/search/keywords/007300750062.js delete mode 100644 Docs/search/keywords/007500730065.js delete mode 100644 Docs/styles/Default/Default.css delete mode 100644 Docs/styles/Default/images/menu-folder-arrow.png delete mode 100644 Docs/styles/Default/images/menu-loading.gif delete mode 100644 Docs/styles/Default/images/menu-tab-classes.png delete mode 100644 Docs/styles/Default/images/menu-tab-database.png delete mode 100644 Docs/styles/Default/images/menu-tab-files.png delete mode 100644 Docs/styles/Default/images/search-class.png delete mode 100644 Docs/styles/Default/images/search-parent.png delete mode 100644 Docs/styles/Default/images/search.png delete mode 100644 Docs/styles/Default/images/summary-loading.gif delete mode 100644 Docs/styles/Default/images/transparent.gif delete mode 100644 Docs/styles/DefaultJS/NDContentPage.js delete mode 100644 Docs/styles/DefaultJS/NDCore.js delete mode 100644 Docs/styles/DefaultJS/NDFramePage.js delete mode 100644 Docs/styles/DefaultJS/NDMenu.js delete mode 100644 Docs/styles/DefaultJS/NDSearch.js delete mode 100644 Docs/styles/DefaultJS/NDSummary.js delete mode 100644 Docs/styles/main.css delete mode 100644 Docs/styles/main.js diff --git a/Docs/Comments.txt b/Docs/Comments.txt deleted file mode 100644 index bea53f9..0000000 --- a/Docs/Comments.txt +++ /dev/null @@ -1,75 +0,0 @@ -Format: 2.0.2 - -# This is the Natural Docs comments file for this project. If you change -# anything here, it will apply to THIS PROJECT ONLY. You can edit the version -# in Natural Docs' Config folder to make the changes apply to all projects, -# but it's recommended that you edit this version instead. - - -# Ignored Keywords -# ------------------------------------------------------------------------ - -# If you'd like to prevent keywords from being recognized by Natural Docs, -# you can do it like this: -# -# Ignore Keywords: -# [keyword] -# [keyword] -# ... - - -# Comment Types -# ------------------------------------------------------------------------ - -# Each Natural Docs comment has a corresponding type which determine its -# behavior. You can define your own here or override the settings of the -# existing ones. -# -# Comment Type: [name] -# Alter Comment Type: [name] -# Creates a new comment type or changes an existing one. -# -# Display Name: [name] -# Plural Display Name: [name] -# The singular and plural name of the comment type as it should appear in -# the output. -# -# Simple Identifier: [name] -# The name of the comment type using only the letters A to Z. No spaces, -# numbers, symbols, or Unicode allowed. Defaults to the comment type name -# minus any unacceptable characters. This is used to generate things like -# CSS class names. -# -# Scope: [normal|start|end|always global] -# How the comment affects scope. Defaults to normal. -# normal - The comment stays within the current scope. -# start - The comment starts a new scope for all the comments -# beneath it, like class comments. -# end - The comment resets the scope back to global for all the -# comments beneath it, like section comments. -# always global - The comment is defined as a global symbol, but does not -# change the scope for any other comments. -# -# Flags: [flag], [flag], ... -# A combination of settings that apply to the comment type. -# Code, File, or Documentation -# Whether it's used to describe a code element, a file, or is a -# standalone documentation comment. Defaults to Code. -# Variable Type -# Whether it describes a code element that can be used as a variable's -# type. -# Class Hierarchy or Database Hierarchy -# Whether it describes a code element that should be included in the -# class or database hierarchy. Requires Scope: Start. -# Enum -# Whether it describes an enum. -# -# Keywords: -# [keyword] -# [keyword], [plural keyword] -# ... -# A list of the comment type's keywords. Each line after the heading is -# the keyword and optionally its plural form for list comments. You can -# reuse existing keywords to change their definition. When using -# "Alter Comment Type", these keywords are added to the existing ones -# rather than replacing them. diff --git a/Docs/Languages.txt b/Docs/Languages.txt deleted file mode 100644 index 232d50d..0000000 --- a/Docs/Languages.txt +++ /dev/null @@ -1,95 +0,0 @@ -Format: 2.0.2 - -# This is the Natural Docs languages file for this project. If you change -# anything here, it will apply to THIS PROJECT ONLY. You can edit the version -# in Natural Docs' Config folder to make the changes apply to all projects, -# but it's recommended that you edit this version instead. - - -# Ignored Extensions -# ------------------------------------------------------------------------ - -# If you'd like to prevent certain file extensions from being scanned by -# Natural Docs, you can do it like this: -# -# Ignore Extensions: [extension] [extension] ... - - -# Languages -# ------------------------------------------------------------------------ - -# These settings define the languages Natural Docs knows how to parse. You -# can define your own here or override the settings of the existing ones. -# Note that all lists are space separated so that commas can be used as -# values. -# -# Language: [name] -# Alter Language: [name] -# Defines a new language or alters an existing one. Its name can use any -# characters. If any of the properties below have an add/replace form, you -# must use that when using Alter Language. -# -# The language Shebang Script is special. It's entry is only used for -# extensions, and files with those extensions have their shebang (#!) lines -# read to determine the real language of the file. Extensionless files are -# always treated this way. -# -# The language Text File is also special. It's treated as one big comment -# so you can put Natural Docs content in them without special symbols. -# -# Extensions: [extension] [extension] ... -# [Add/Replace] Extensions: [extension] [extension] ... -# Defines the file extensions of the language's source files. -# -# Shebang Strings: [string] [string] ... -# [Add/Replace] Shebang Strings: [string] [string] ... -# Defines a list of strings that can appear in the shebang (#!) line to -# designate that it's part of the language. -# -# Simple Identifier: [name] -# The name of the language using only the letters A to Z. No spaces, -# numbers, symbols, or Unicode allowed. Defaults to the language name -# minus any unacceptable characters. This is used to generate things like -# CSS class names. -# -# Aliases: [alias] [alias] ... -# [Add/Replace] Aliases: [alias] [alias] ... -# Defines alternate names for the language that can be used to start a code -# block. -# -# -# Properties for Basic Language Support Only -# ------------------------------------------------------------------------ -# If you're adding your own language to Natural Docs you must define these. -# -# Line Comments: [symbol] [symbol] ... -# Defines a space-separated list of symbols that are used for line comments, -# if any. -# -# Block Comments: [opening sym] [closing sym] [opening sym] [closing sym] ... -# Defines a space-separated list of symbol pairs that are used for block -# comments, if any. -# -# Member Operator: [symbol] -# Defines the default member operator symbol. The default is a dot. -# -# Line Extender: [symbol] -# Defines the symbol that allows a prototype to span multiple lines if -# normally a line break would end it. -# -# Enum Values: [global|under type|under parent] -# Defines how enum values are referenced. The default is global. -# global - Values are always global, referenced as 'value'. -# under type - Values are under the enum type, referenced as -# 'class.enum.value'. -# under parent - Values are under the enum's parent, referenced as -# 'class.value'. -# -# Case Sensitive: [yes|no] -# Defines whether the language's identifiers are case sensitive. The -# default is yes. -# -# [Comment Type] Prototype Enders: [symbol] [symbol] ... -# When defined, Natural Docs will attempt to get a prototype from the code -# immediately following the comment type. It stops when it reaches one of -# these symbols. Use \n for line breaks. diff --git a/Docs/Project.txt b/Docs/Project.txt deleted file mode 100644 index 53a2999..0000000 --- a/Docs/Project.txt +++ /dev/null @@ -1,129 +0,0 @@ -Format: 2.0.2 - -# This is the file you use to provide information about your project. It can -# also be used to specify input and output settings so you don't have to -# include them on the command line. - - -# Project Information -# ------------------------------------------------------------------------ - -# This is where you specify general information about your project. -# -# Title: [text] -# The name of your project. (R) and (TM) will be converted to their -# respective symbols. -# -# Subtitle: [text] -# A subtitle for your project. -# -# Copyright: [text] -# The copyright notice for your project. (C) will be converted to the -# copyright symbol. -# -# Timestamp: [text] -# Text explaining when the documentation was generated. The following -# substitutions are performed: -# m - Single digit month, when possible. January is "1". -# mm - Always double digit month. January is "01". -# mon - Short month word. January is "Jan". -# month - Long month word. January is "January". -# d - Single digit day, when possible. 1 is "1". -# dd - Always double digit day. 1 is "01". -# day - Day with text extension. 1 is "1st". -# yy - Double digit year. 2017 is "17". -# yyyy - Four digit year. 2017 is "2017". -# year - Four digit year. 2017 is "2017". -# -# Style: [style] -# The style to apply to the generated documentation. It can be the name of -# a CSS file in the project configuration folder or a subfolder that -# contains Style.txt. Do not include ".css" if using a CSS file. - - -# Source Code -# ------------------------------------------------------------------------ - -Source Folder: ../PyJudge - - - -# This is where you specify what files and folders Natural Docs should be -# scanning. If you use any of these options on the command line, this entire -# section is ignored except for names and numbers. -# -# All paths are relative to the project configuration folder, which lets this -# file remain portable across computers and not cause problems in version -# control systems. You can enter absolute paths and they will be converted -# automatically. -# -# Source Folder: [path] -# Name: [name] -# -# Specifies a folder which will be searched for source files. If you have -# more than one, add the Name property to set how it will show up in the -# menu. - - -# Source Filtering -# ------------------------------------------------------------------------ - -# If there are any subfolders in the source code that you would like Natural -# Docs to ignore, they can be specified here. If you use any of these options -# on the command line, this entire section is ignored. -# -# Ignore Source Folder: [path] -# Tells Natural Docs to skip this folder when scanning files. -# -# Ignore Source Folder Pattern: [pattern] -# Tells Natural Docs to skip all folder names which match this pattern when -# scanning files. ? matches a single character, * matches zero or more -# characters. It applies to the entire folder name, so "cli" will not -# match "client", although "cli*" will. -# -# The data folders of common version control systems (.git, .svn, .cvs, .hg) -# are ignored automatically. You do not have to specify them here. - - -# Generated Documentation -# ------------------------------------------------------------------------ - -HTML Output Folder: . - - -# This is where you specify what kind of documentation you want Natural Docs -# to build and where it should be put. If you use any of these options on the -# command line, this entire section is ignored except for secondary settings. -# -# All paths are relative to the project configuration folder, which lets this -# file remain portable across computers and not cause problems in version -# control systems. You can enter absolute paths and they will be converted -# automatically. -# -# You can override any of the project information settings under each entry, -# so if you have multiple output folders you can give them each different -# styles or subtitles. -# -# HTML Output Folder: [path] -# [Project Information] -# -# Generates HTML documentation in the specified folder. - - -# Global Settings -# ------------------------------------------------------------------------ - -# Other settings that apply to your entire project. Settings specified on the -# command line override the settings here. -# -# Tab Width: [width] -# The number of spaces tabs should be expanded to. -# -# Documented Only: [yes|no] -# Whether only documented code elements should appear in the output. -# Defaults to no. -# -# Auto Group: [yes|no] -# Whether groups should automatically apply to you code. Defaults to yes. - - diff --git a/Docs/Working Data/CodeDB.nd b/Docs/Working Data/CodeDB.nd deleted file mode 100644 index 149233408336dc835f4a2882c26a6ee27370f71c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114688 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 No{~AJ{~>6`{{wdDbjAPx diff --git a/Docs/Working Data/Comments.nd b/Docs/Working Data/Comments.nd deleted file mode 100644 index cc29629cb8823b663f2b56e9c1e2ce7fb84a1acf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4310 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 DDH$|) diff --git a/Docs/Working Data/Parser.nd b/Docs/Working Data/Parser.nd deleted file mode 100644 index 6472d74b43da1b195c1896f231993d1ba4a95f2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525 zcmYL`&27Ul424PksqK+x@*;P3aSSA7!1l(Dq@q@6frExq+ zqIY(6ybvH8V)M-I_v4enI-y?Rskwxhb|WvV7*1`tf|pR}1y|;ZaNV?7vfLXo+76nN zP|NC1jEfN&{dnR!w5RS$Nf=iXqElkDstAjwD=x9bWz)u65HjN*R0>sg6_Y-n!o_We zk4JMid44<5ZVvsUx1Z8SZ~y3RW}IuAiRQ?IK?aPbV+^Lds^p||(*Y9(8;S95Z>sg6 zrY4;}TaG&0WJ0pBB$qoTTWY7bJtgd&nws~PNNmpHh*(=$MV+&fO4Vw$0(=Ht5m?<3 I{4War0I{N}g#Z8m diff --git a/Docs/Working Data/Project.nd b/Docs/Working Data/Project.nd deleted file mode 100644 index 8e6fbd708bcd5c251a10661c8eeb26f9d31a555c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmX@<=W;eFGj9*8k)DB`5eowlFf#H6=a&{Grz*JR=cJ?-N$F?g=cejsW$Wh`q~?L7 pQuPBWy-HKkQyGEEg*-xheH8plOA1O$pgP2{=y1tTE(R%Q007^QBJThI diff --git a/Docs/Working Data/SearchIndex.nd b/Docs/Working Data/SearchIndex.nd deleted file mode 100644 index a1968e0736498fcf706f6b27c8e7827e50093f24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343 zcmXxgTMmLS5Cu^5it+t^t%4ZV;J14~C_;iXmJm1R2K;bO&aK18$;?eVP211)^1YSy zJB*`q6r*iSF9?DT8q=`vE2Op_NDmcCrMX&3B|KZh8SbT-Let)O-cX^kcdn1rMk?*p zK`J3F63&ek3j1K5C}fGh=TtHwZ)>i1_d;f0%nK#&a?DEwm-zi_$%NGTf7nV-aQ}bU TOHatlit|SW
Contest
Each Contest instance contains:- Code Description of contest Contest start time and End Time
"}); \ No newline at end of file diff --git a/Docs/classes/Python/Contest-ToolTips.js b/Docs/classes/Python/Contest-ToolTips.js deleted file mode 100644 index 59992a1..0000000 --- a/Docs/classes/Python/Contest-ToolTips.js +++ /dev/null @@ -1 +0,0 @@ -NDContentPage.OnToolTipsLoaded({}); \ No newline at end of file diff --git a/Docs/classes/Python/Contest.html b/Docs/classes/Python/Contest.html deleted file mode 100644 index 5c7e2f6..0000000 --- a/Docs/classes/Python/Contest.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Contest - - - - - - - -
-
Contest
-
Model
Contest
-

Each Contest instance contains:- Code Description of contest Contest start time and End Time

-
- - \ No newline at end of file diff --git a/Docs/classes/Python/ContestProblems-Summary.js b/Docs/classes/Python/ContestProblems-Summary.js deleted file mode 100644 index 53de979..0000000 --- a/Docs/classes/Python/ContestProblems-Summary.js +++ /dev/null @@ -1 +0,0 @@ -NDFramePage.OnPageTitleLoaded("PythonClass:ContestProblems","ContestProblems");NDSummary.OnSummaryLoaded("PythonClass:ContestProblems",[["Python","Python"]],[["Classes","Class"]],[[5,0,0,"ContestProblems"]]); \ No newline at end of file diff --git a/Docs/classes/Python/ContestProblems-SummaryToolTips.js b/Docs/classes/Python/ContestProblems-SummaryToolTips.js deleted file mode 100644 index 60824bc..0000000 --- a/Docs/classes/Python/ContestProblems-SummaryToolTips.js +++ /dev/null @@ -1 +0,0 @@ -NDSummary.OnToolTipsLoaded("PythonClass:ContestProblems",{5:"
ContestProblems
All contest problems belong to a Contest and are itself a question.  contest defines the instance of Contest Class it belongs question defines the questions that belongs to that contest.
"}); \ No newline at end of file diff --git a/Docs/classes/Python/ContestProblems-ToolTips.js b/Docs/classes/Python/ContestProblems-ToolTips.js deleted file mode 100644 index 59992a1..0000000 --- a/Docs/classes/Python/ContestProblems-ToolTips.js +++ /dev/null @@ -1 +0,0 @@ -NDContentPage.OnToolTipsLoaded({}); \ No newline at end of file diff --git a/Docs/classes/Python/ContestProblems.html b/Docs/classes/Python/ContestProblems.html deleted file mode 100644 index 885db6e..0000000 --- a/Docs/classes/Python/ContestProblems.html +++ /dev/null @@ -1,17 +0,0 @@ - - -ContestProblems - - - - - - - -
-
ContestProblems
-
Model
ContestProblems
-

All contest problems belong to a Contest and are itself a question.  contest defines the instance of Contest Class it belongs question defines the questions that belongs to that contest.

-
- - \ No newline at end of file diff --git a/Docs/classes/Python/Question-Summary.js b/Docs/classes/Python/Question-Summary.js deleted file mode 100644 index f3890c7..0000000 --- a/Docs/classes/Python/Question-Summary.js +++ /dev/null @@ -1 +0,0 @@ -NDFramePage.OnPageTitleLoaded("PythonClass:Question","Question");NDSummary.OnSummaryLoaded("PythonClass:Question",[["Python","Python"]],[["Classes","Class"]],[[4,0,0,"Question"]]); \ No newline at end of file diff --git a/Docs/classes/Python/Question-SummaryToolTips.js b/Docs/classes/Python/Question-SummaryToolTips.js deleted file mode 100644 index 610f29e..0000000 --- a/Docs/classes/Python/Question-SummaryToolTips.js +++ /dev/null @@ -1 +0,0 @@ -NDSummary.OnToolTipsLoaded("PythonClass:Question",{4:"
Question
Each Question has a Question no and a author associated to it
"}); \ No newline at end of file diff --git a/Docs/classes/Python/Question-ToolTips.js b/Docs/classes/Python/Question-ToolTips.js deleted file mode 100644 index 59992a1..0000000 --- a/Docs/classes/Python/Question-ToolTips.js +++ /dev/null @@ -1 +0,0 @@ -NDContentPage.OnToolTipsLoaded({}); \ No newline at end of file diff --git a/Docs/classes/Python/Question.html b/Docs/classes/Python/Question.html deleted file mode 100644 index 2e42aab..0000000 --- a/Docs/classes/Python/Question.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Question - - - - - - - -
-
Question
-
Model
Question
-

Each Question has a Question no and a author associated to it

-
- - \ No newline at end of file diff --git a/Docs/classes/Python/Session-Summary.js b/Docs/classes/Python/Session-Summary.js deleted file mode 100644 index 081e79e..0000000 --- a/Docs/classes/Python/Session-Summary.js +++ /dev/null @@ -1 +0,0 @@ -NDFramePage.OnPageTitleLoaded("PythonClass:Session","Session");NDSummary.OnSummaryLoaded("PythonClass:Session",[["Python","Python"]],[["Classes","Class"]],[[2,0,0,"Session"]]); \ No newline at end of file diff --git a/Docs/classes/Python/Session-SummaryToolTips.js b/Docs/classes/Python/Session-SummaryToolTips.js deleted file mode 100644 index de2af08..0000000 --- a/Docs/classes/Python/Session-SummaryToolTips.js +++ /dev/null @@ -1 +0,0 @@ -NDSummary.OnToolTipsLoaded("PythonClass:Session",{2:"
Session
Generates randam token for every section new Token is assigned to every User for every new session
"}); \ No newline at end of file diff --git a/Docs/classes/Python/Session-ToolTips.js b/Docs/classes/Python/Session-ToolTips.js deleted file mode 100644 index 59992a1..0000000 --- a/Docs/classes/Python/Session-ToolTips.js +++ /dev/null @@ -1 +0,0 @@ -NDContentPage.OnToolTipsLoaded({}); \ No newline at end of file diff --git a/Docs/classes/Python/Session.html b/Docs/classes/Python/Session.html deleted file mode 100644 index 5521b75..0000000 --- a/Docs/classes/Python/Session.html +++ /dev/null @@ -1,17 +0,0 @@ - - -Session - - - - - - - -
-
Session
-
Model
Session
-

Generates randam token for every section new Token is assigned to every User for every new session

-
- - \ No newline at end of file diff --git a/Docs/classes/Python/Submission-Summary.js b/Docs/classes/Python/Submission-Summary.js deleted file mode 100644 index 44d54ea..0000000 --- a/Docs/classes/Python/Submission-Summary.js +++ /dev/null @@ -1 +0,0 @@ -NDFramePage.OnPageTitleLoaded("PythonClass:Submission","Submission");NDSummary.OnSummaryLoaded("PythonClass:Submission",[["Python","Python"]],[["Classes","Class"],["Functions","Function"],["Groups","Group"]],[[6,0,0,"Submission"],[7,0,2,"Functions","Functions"],[8,0,1,"login_required","login_required"],[9,0,1,"changePath","changePath"],[10,0,1,"home","home"],[11,0,1,"dashboard","dashboard"],[12,0,1,"question","question"],[13,0,1,"contest: Function","contest_Function"],[14,0,1,"download","download"],[15,0,1,"server_static","server_static"],[16,0,1,"contest_ranking","contest_ranking"],[17,0,1,"rankings","rankings"],[18,0,1,"loggedIn","loggedIn"],[19,0,1,"createSession","createSession"],[20,0,1,"login","login"],[21,0,1,"resgiter","resgiter"],[22,0,1,"logout","logout"],[23,0,1,"file_upload","file_upload"],[24,0,1,"error404","error404"]]); \ No newline at end of file diff --git a/Docs/classes/Python/Submission-SummaryToolTips.js b/Docs/classes/Python/Submission-SummaryToolTips.js deleted file mode 100644 index 2a2b8f6..0000000 --- a/Docs/classes/Python/Submission-SummaryToolTips.js +++ /dev/null @@ -1 +0,0 @@ -NDSummary.OnToolTipsLoaded("PythonClass:Submission",{6:"
Submission
Class defines the submission of solution of a Question Stores the information about: User that submits the Solution Time of Submission Contest to whish The question belongs Whether the soolution is correct
",8:"
def login_required(
function
)
Extends the functainality of a funcion by checking log in condition.  Checks if the user is logged in.if not redirect the user to home page with message \'Login Required\' parameters : Function on which decorator is applied
",9:"
@app.route(
"/"
) def changePath()
redirects to home page
",10:"
@app.get(
"/home"
) def home()
redirects to Dashboard of the user
",11:"
@app.get(
"/dashboard"
) @login_required def dashboard()
redirects to Dashboard of the user
",12:"
@app.get(
"/contest/<code>/<number>"
) @login_required def question(code, number)
Checks if the question and Contest it belongs does exists.  If exists : it checks the current status of the contest And then returns the question state ment along with question numbers and contest code to the Template Parameters: code: Contest Code number: Question Number Return: Question Template
",13:"
Checks if contest exists by validating the contest id.  Checks the the current staus of code Parameters: code : contest code Return : Contest Template
",14:"
@app.get(
"/question/<path:path>"
) def download(path)
Downloads the question to local system Parameters: path :path to download from Return : Static Files: Downloadable Files
",15:"
@app.get(
"/static/<filepath:path>"
) def server_static(filepath)
Static files for server Parameters: path :path of file Return : Static Files
",16:"
@app.get(
"/ranking/<code>"
) def contest_ranking(code)
Generates rankinks of users in a Contest i.e the Contest results Validates the Sumbission And Contest Checks the number of correct submissions for each user and Added to list with tuples of Username Along with thier Scores . The tuples are added to list in descending order of the score .Then rankings are given to each Username in the list.
",17:"
@app.get(
"/ranking"
) def rankings()
Overall Ranking of the user over all the Contest.  Parameters: None Return : Ranking Template with Overall Ranking
",18:"
Downloads the question to local system Parameters: None Return : True: if Session exixsts for the user Logged In False: if Session not exixst for the user Logged In or if the s_id is not present or is wrong
",19:"
def createSession(
username
)
Create a session for the user Set up cookie for The current session with seesion id ,token and expiry time Parameters: username: Username of user For whom session is Created.  Return : Redirects to user Dashoard
",20:"
@app.post(
"/login"
) def login()
This function is called whenever user log in to the app Checks if the user entered the Right credentials for log in Parameters: None Return : Redirects to home if invalid credenial Else Creates the session for the user
",21:"
This function is called whenever new user registers New User is Created in the Data base and his credentials are stored Checks if the user with same username already exisxts Parameters: None Return : Creates session for new user.
",22:"
@app.get(
"/logout"
) def logout()
Ends the session for the user Deletes the session cookie
",23:"
@app.post(
"/check/<code>/<number>"
) @login_required def file_upload(code, number)
This Function is used to upload the submission to  Question to the Server.  Parameters: code: Contest Code number : Question No of ehich solution is uploaded Return : "Wrong Answer!! : If solution is wrong "Solved! Great Job! " : If solution is correct
",24:"
@app.error(
404
) def error404(error)
Handles Error Parameter: error : Error rturned the App Return : Redirects to
"}); \ No newline at end of file diff --git a/Docs/classes/Python/Submission-ToolTips.js b/Docs/classes/Python/Submission-ToolTips.js deleted file mode 100644 index 59992a1..0000000 --- a/Docs/classes/Python/Submission-ToolTips.js +++ /dev/null @@ -1 +0,0 @@ -NDContentPage.OnToolTipsLoaded({}); \ No newline at end of file diff --git a/Docs/classes/Python/Submission.html b/Docs/classes/Python/Submission.html deleted file mode 100644 index 07ba44d..0000000 --- a/Docs/classes/Python/Submission.html +++ /dev/null @@ -1,120 +0,0 @@ - - -Submission - - - - - - - -
-
Submission
-
Model
Submission
-

Class defines the submission of solution of a Question Stores the information about: User that submits the Solution Time of Submission Contest to whish The question belongs Whether the soolution is correct

-
- -
-
Functions
-
- -
-
login_required
-
def login_required(
function
)
-

Extends the functainality of a funcion by checking log in condition.  Checks if the user is logged in.if not redirect the user to home page with message 'Login Required' parameters : Function on which decorator is applied

-
- -
-
changePath
-
@app.route(
"/"
) def changePath()
-

redirects to home page

-
- -
-
home
-
@app.get(
"/home"
) def home()
-

redirects to Dashboard of the user

-
- -
-
dashboard
-
@app.get(
"/dashboard"
) @login_required def dashboard()
-

redirects to Dashboard of the user

-
- -
-
question
-
@app.get(
"/contest/<code>/<number>"
) @login_required def question(code, number)
-

Checks if the question and Contest it belongs does exists.  If exists : it checks the current status of the contest And then returns the question state ment along with question numbers and contest code to the Template Parameters: code: Contest Code number: Question Number Return: Question Template

-
- -
-
contest: Function
-

Checks if contest exists by validating the contest id.  Checks the the current staus of code Parameters: code : contest code Return : Contest Template

-
- -
-
download
-
@app.get(
"/question/<path:path>"
) def download(path)
-

Downloads the question to local system Parameters: path :path to download from Return : Static Files: Downloadable Files

-
- -
-
server_static
-
@app.get(
"/static/<filepath:path>"
) def server_static(filepath)
-

Static files for server Parameters: path :path of file Return : Static Files

-
- -
-
contest_ranking
-
@app.get(
"/ranking/<code>"
) def contest_ranking(code)
-

Generates rankinks of users in a Contest i.e the Contest results Validates the Sumbission And Contest Checks the number of correct submissions for each user and Added to list with tuples of Username Along with thier Scores . The tuples are added to list in descending order of the score .Then rankings are given to each Username in the list.

Parameters

code : contest code Return : Ranking Template with ranks of different user in  a contest.

-
- -
-
rankings
-
@app.get(
"/ranking"
) def rankings()
-

Overall Ranking of the user over all the Contest.  Parameters: None Return : Ranking Template with Overall Ranking

-
- -
-
loggedIn
-

Downloads the question to local system Parameters: None Return : True: if Session exixsts for the user Logged In False: if Session not exixst for the user Logged In or if the s_id is not present or is wrong

-
- -
-
createSession
-
def createSession(
username
)
-

Create a session for the user Set up cookie for The current session with seesion id ,token and expiry time Parameters: username: Username of user For whom session is Created.  Return : Redirects to user Dashoard

-
- -
-
login
-
@app.post(
"/login"
) def login()
-

This function is called whenever user log in to the app Checks if the user entered the Right credentials for log in Parameters: None Return : Redirects to home if invalid credenial Else Creates the session for the user

-
- -
-
resgiter
-

This function is called whenever new user registers New User is Created in the Data base and his credentials are stored Checks if the user with same username already exisxts Parameters: None Return : Creates session for new user.

-
- -
-
logout
-
@app.get(
"/logout"
) def logout()
-

Ends the session for the user Deletes the session cookie

Parameters

None Return : Redirects to Home Page

-
- -
-
file_upload
-
@app.post(
"/check/<code>/<number>"
) @login_required def file_upload(code, number)
-

This Function is used to upload the submission to  Question to the Server.  Parameters: code: Contest Code number : Question No of ehich solution is uploaded Return : "Wrong Answer!! : If solution is wrong "Solved! Great Job! " : If solution is correct

-
- -
-
error404
-
@app.error(
404
) def error404(error)
-

Handles Error Parameter: error : Error rturned the App Return : Redirects to

-
- - \ No newline at end of file diff --git a/Docs/classes/Python/User-Summary.js b/Docs/classes/Python/User-Summary.js deleted file mode 100644 index 00e6334..0000000 --- a/Docs/classes/Python/User-Summary.js +++ /dev/null @@ -1 +0,0 @@ -NDFramePage.OnPageTitleLoaded("PythonClass:User","User");NDSummary.OnSummaryLoaded("PythonClass:User",[["Python","Python"]],[["Classes","Class"]],[[1,0,0,"User"]]); \ No newline at end of file diff --git a/Docs/classes/Python/User-SummaryToolTips.js b/Docs/classes/Python/User-SummaryToolTips.js deleted file mode 100644 index 40fae6a..0000000 --- a/Docs/classes/Python/User-SummaryToolTips.js +++ /dev/null @@ -1 +0,0 @@ -NDSummary.OnToolTipsLoaded("PythonClass:User",{1:"
User
Defines username and password for individual user.
"}); \ No newline at end of file diff --git a/Docs/classes/Python/User-ToolTips.js b/Docs/classes/Python/User-ToolTips.js deleted file mode 100644 index 59992a1..0000000 --- a/Docs/classes/Python/User-ToolTips.js +++ /dev/null @@ -1 +0,0 @@ -NDContentPage.OnToolTipsLoaded({}); \ No newline at end of file diff --git a/Docs/classes/Python/User.html b/Docs/classes/Python/User.html deleted file mode 100644 index 9ab28f5..0000000 --- a/Docs/classes/Python/User.html +++ /dev/null @@ -1,17 +0,0 @@ - - -User - - - - - - - -
-
User
-
Model
User
-

Defines username and password for individual user.

-
- - \ No newline at end of file diff --git a/Docs/files/server-py-Summary.js b/Docs/files/server-py-Summary.js deleted file mode 100644 index 95342a0..0000000 --- a/Docs/files/server-py-Summary.js +++ /dev/null @@ -1 +0,0 @@ -NDFramePage.OnPageTitleLoaded("File:server.py","server.py");NDSummary.OnSummaryLoaded("File:server.py",[["Python","Python"]],[["Classes","Class"],["Functions","Function"],["Groups","Group"]],[[1,0,0,"User","User"],[2,0,0,"Session","Session"],[3,0,0,"Contest","Contest"],[4,0,0,"Question","Question"],[5,0,0,"ContestProblems","ContestProblems"],[6,0,0,"Submission","Submission"],[7,0,2,"Functions","Submission.Functions"],[8,0,1,"login_required","Submission.login_required"],[9,0,1,"changePath","Submission.changePath"],[10,0,1,"home","Submission.home"],[11,0,1,"dashboard","Submission.dashboard"],[12,0,1,"question","Submission.question"],[13,0,1,"contest: Function","Submission.contest_Function"],[14,0,1,"download","Submission.download"],[15,0,1,"server_static","Submission.server_static"],[16,0,1,"contest_ranking","Submission.contest_ranking"],[17,0,1,"rankings","Submission.rankings"],[18,0,1,"loggedIn","Submission.loggedIn"],[19,0,1,"createSession","Submission.createSession"],[20,0,1,"login","Submission.login"],[21,0,1,"resgiter","Submission.resgiter"],[22,0,1,"logout","Submission.logout"],[23,0,1,"file_upload","Submission.file_upload"],[24,0,1,"error404","Submission.error404"]]); \ No newline at end of file diff --git a/Docs/files/server-py-SummaryToolTips.js b/Docs/files/server-py-SummaryToolTips.js deleted file mode 100644 index 20446b5..0000000 --- a/Docs/files/server-py-SummaryToolTips.js +++ /dev/null @@ -1 +0,0 @@ -NDSummary.OnToolTipsLoaded("File:server.py",{1:"
User
Defines username and password for individual user.
",2:"
Session
Generates randam token for every section new Token is assigned to every User for every new session
",3:"
Contest
Each Contest instance contains:- Code Description of contest Contest start time and End Time
",4:"
Question
Each Question has a Question no and a author associated to it
",5:"
ContestProblems
All contest problems belong to a Contest and are itself a question.  contest defines the instance of Contest Class it belongs question defines the questions that belongs to that contest.
",6:"
Submission
Class defines the submission of solution of a Question Stores the information about: User that submits the Solution Time of Submission Contest to whish The question belongs Whether the soolution is correct
",8:"
def login_required(
function
)
Extends the functainality of a funcion by checking log in condition.  Checks if the user is logged in.if not redirect the user to home page with message \'Login Required\' parameters : Function on which decorator is applied
",9:"
@app.route(
"/"
) def changePath()
redirects to home page
",10:"
@app.get(
"/home"
) def home()
redirects to Dashboard of the user
",11:"
@app.get(
"/dashboard"
) @login_required def dashboard()
redirects to Dashboard of the user
",12:"
@app.get(
"/contest/<code>/<number>"
) @login_required def question(code, number)
Checks if the question and Contest it belongs does exists.  If exists : it checks the current status of the contest And then returns the question state ment along with question numbers and contest code to the Template Parameters: code: Contest Code number: Question Number Return: Question Template
",13:"
Checks if contest exists by validating the contest id.  Checks the the current staus of code Parameters: code : contest code Return : Contest Template
",14:"
@app.get(
"/question/<path:path>"
) def download(path)
Downloads the question to local system Parameters: path :path to download from Return : Static Files: Downloadable Files
",15:"
@app.get(
"/static/<filepath:path>"
) def server_static(filepath)
Static files for server Parameters: path :path of file Return : Static Files
",16:"
@app.get(
"/ranking/<code>"
) def contest_ranking(code)
Generates rankinks of users in a Contest i.e the Contest results Validates the Sumbission And Contest Checks the number of correct submissions for each user and Added to list with tuples of Username Along with thier Scores . The tuples are added to list in descending order of the score .Then rankings are given to each Username in the list.
",17:"
@app.get(
"/ranking"
) def rankings()
Overall Ranking of the user over all the Contest.  Parameters: None Return : Ranking Template with Overall Ranking
",18:"
Downloads the question to local system Parameters: None Return : True: if Session exixsts for the user Logged In False: if Session not exixst for the user Logged In or if the s_id is not present or is wrong
",19:"
def createSession(
username
)
Create a session for the user Set up cookie for The current session with seesion id ,token and expiry time Parameters: username: Username of user For whom session is Created.  Return : Redirects to user Dashoard
",20:"
@app.post(
"/login"
) def login()
This function is called whenever user log in to the app Checks if the user entered the Right credentials for log in Parameters: None Return : Redirects to home if invalid credenial Else Creates the session for the user
",21:"
This function is called whenever new user registers New User is Created in the Data base and his credentials are stored Checks if the user with same username already exisxts Parameters: None Return : Creates session for new user.
",22:"
@app.get(
"/logout"
) def logout()
Ends the session for the user Deletes the session cookie
",23:"
@app.post(
"/check/<code>/<number>"
) @login_required def file_upload(code, number)
This Function is used to upload the submission to  Question to the Server.  Parameters: code: Contest Code number : Question No of ehich solution is uploaded Return : "Wrong Answer!! : If solution is wrong "Solved! Great Job! " : If solution is correct
",24:"
@app.error(
404
) def error404(error)
Handles Error Parameter: error : Error rturned the App Return : Redirects to
"}); \ No newline at end of file diff --git a/Docs/files/server-py-ToolTips.js b/Docs/files/server-py-ToolTips.js deleted file mode 100644 index 59992a1..0000000 --- a/Docs/files/server-py-ToolTips.js +++ /dev/null @@ -1 +0,0 @@ -NDContentPage.OnToolTipsLoaded({}); \ No newline at end of file diff --git a/Docs/files/server-py.html b/Docs/files/server-py.html deleted file mode 100644 index 09613bd..0000000 --- a/Docs/files/server-py.html +++ /dev/null @@ -1,150 +0,0 @@ - - -server.py - - - - - - - -
-
User
-
Model
User
-

Defines username and password for individual user.

-
- -
-
Session
-
Model
Session
-

Generates randam token for every section new Token is assigned to every User for every new session

-
- -
-
Contest
-
Model
Contest
-

Each Contest instance contains:- Code Description of contest Contest start time and End Time

-
- -
-
Question
-
Model
Question
-

Each Question has a Question no and a author associated to it

-
- -
-
ContestProblems
-
Model
ContestProblems
-

All contest problems belong to a Contest and are itself a question.  contest defines the instance of Contest Class it belongs question defines the questions that belongs to that contest.

-
- -
-
Submission
-
Model
Submission
-

Class defines the submission of solution of a Question Stores the information about: User that submits the Solution Time of Submission Contest to whish The question belongs Whether the soolution is correct

-
- -
-
Functions
-
- -
-
login_required
-
def login_required(
function
)
-

Extends the functainality of a funcion by checking log in condition.  Checks if the user is logged in.if not redirect the user to home page with message 'Login Required' parameters : Function on which decorator is applied

-
- -
-
changePath
-
@app.route(
"/"
) def changePath()
-

redirects to home page

-
- -
-
home
-
@app.get(
"/home"
) def home()
-

redirects to Dashboard of the user

-
- -
-
dashboard
-
@app.get(
"/dashboard"
) @login_required def dashboard()
-

redirects to Dashboard of the user

-
- -
-
question
-
@app.get(
"/contest/<code>/<number>"
) @login_required def question(code, number)
-

Checks if the question and Contest it belongs does exists.  If exists : it checks the current status of the contest And then returns the question state ment along with question numbers and contest code to the Template Parameters: code: Contest Code number: Question Number Return: Question Template

-
- -
-
contest: Function
-

Checks if contest exists by validating the contest id.  Checks the the current staus of code Parameters: code : contest code Return : Contest Template

-
- -
-
download
-
@app.get(
"/question/<path:path>"
) def download(path)
-

Downloads the question to local system Parameters: path :path to download from Return : Static Files: Downloadable Files

-
- -
-
server_static
-
@app.get(
"/static/<filepath:path>"
) def server_static(filepath)
-

Static files for server Parameters: path :path of file Return : Static Files

-
- -
-
contest_ranking
-
@app.get(
"/ranking/<code>"
) def contest_ranking(code)
-

Generates rankinks of users in a Contest i.e the Contest results Validates the Sumbission And Contest Checks the number of correct submissions for each user and Added to list with tuples of Username Along with thier Scores . The tuples are added to list in descending order of the score .Then rankings are given to each Username in the list.

Parameters

code : contest code Return : Ranking Template with ranks of different user in  a contest.

-
- -
-
rankings
-
@app.get(
"/ranking"
) def rankings()
-

Overall Ranking of the user over all the Contest.  Parameters: None Return : Ranking Template with Overall Ranking

-
- -
-
loggedIn
-

Downloads the question to local system Parameters: None Return : True: if Session exixsts for the user Logged In False: if Session not exixst for the user Logged In or if the s_id is not present or is wrong

-
- -
-
createSession
-
def createSession(
username
)
-

Create a session for the user Set up cookie for The current session with seesion id ,token and expiry time Parameters: username: Username of user For whom session is Created.  Return : Redirects to user Dashoard

-
- -
-
login
-
@app.post(
"/login"
) def login()
-

This function is called whenever user log in to the app Checks if the user entered the Right credentials for log in Parameters: None Return : Redirects to home if invalid credenial Else Creates the session for the user

-
- -
-
resgiter
-

This function is called whenever new user registers New User is Created in the Data base and his credentials are stored Checks if the user with same username already exisxts Parameters: None Return : Creates session for new user.

-
- -
-
logout
-
@app.get(
"/logout"
) def logout()
-

Ends the session for the user Deletes the session cookie

Parameters

None Return : Redirects to Home Page

-
- -
-
file_upload
-
@app.post(
"/check/<code>/<number>"
) @login_required def file_upload(code, number)
-

This Function is used to upload the submission to  Question to the Server.  Parameters: code: Contest Code number : Question No of ehich solution is uploaded Return : "Wrong Answer!! : If solution is wrong "Solved! Great Job! " : If solution is correct

-
- -
-
error404
-
@app.error(
404
) def error404(error)
-

Handles Error Parameter: error : Error rturned the App Return : Redirects to

-
- - \ No newline at end of file diff --git a/Docs/index.html b/Docs/index.html deleted file mode 100644 index 813c6ad..0000000 --- a/Docs/index.html +++ /dev/null @@ -1,9 +0,0 @@ - - -Source Documentation - - - - - -
\ No newline at end of file diff --git a/Docs/menu/classes.js b/Docs/menu/classes.js deleted file mode 100644 index 2eb3f71..0000000 --- a/Docs/menu/classes.js +++ /dev/null @@ -1 +0,0 @@ -NDMenu.OnSectionLoaded("classes.js",[[1,"Contest"],[1,"ContestProblems"],[1,"Question"],[1,"Session"],[1,"Submission"],[1,"User"]]); \ No newline at end of file diff --git a/Docs/menu/files.js b/Docs/menu/files.js deleted file mode 100644 index d54ed9c..0000000 --- a/Docs/menu/files.js +++ /dev/null @@ -1 +0,0 @@ -NDMenu.OnSectionLoaded("files.js",[[1,"server.py"]]); \ No newline at end of file diff --git a/Docs/menu/tabs.js b/Docs/menu/tabs.js deleted file mode 100644 index 8fc21d8..0000000 --- a/Docs/menu/tabs.js +++ /dev/null @@ -1 +0,0 @@ -NDMenu.OnTabsLoaded([["File","Files","File:","files.js"],["Class","Classes","PythonClass:","classes.js"]]); \ No newline at end of file diff --git a/Docs/other/home.html b/Docs/other/home.html deleted file mode 100644 index 4d89783..0000000 --- a/Docs/other/home.html +++ /dev/null @@ -1,13 +0,0 @@ - - -Source Documentation - - - - - - - -
Source Documentation
- -
\ No newline at end of file diff --git a/Docs/search/index.js b/Docs/search/index.js deleted file mode 100644 index ef87c42..0000000 --- a/Docs/search/index.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixIndexLoaded(["cha","con","cre","das","dow","err","fil","fun","hom","log","que","ran","res","ser","ses","sub","use"]); \ No newline at end of file diff --git a/Docs/search/keywords/006300680061.js b/Docs/search/keywords/006300680061.js deleted file mode 100644 index b7ad4ef..0000000 --- a/Docs/search/keywords/006300680061.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("cha",["Function"],[["changePath",,[["Submission",,,,0,"File:server.py:Submission.changePath","PythonClass:Submission:changePath"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/0063006f006e.js b/Docs/search/keywords/0063006f006e.js deleted file mode 100644 index ee38a7e..0000000 --- a/Docs/search/keywords/0063006f006e.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("con",["Class","Function"],[["Contest",,[[,,,,0,"File:server.py:Contest","PythonClass:Contest"]]],["contest:",,[["Submission","contest: Function",,"contest:function",1,"File:server.py:Submission.contest_Function","PythonClass:Submission:contest_Function"]]],["contest_ranking",,[["Submission",,,,1,"File:server.py:Submission.contest_ranking","PythonClass:Submission:contest_ranking"]]],["ContestProblems",,[[,,,,0,"File:server.py:ContestProblems","PythonClass:ContestProblems"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/006300720065.js b/Docs/search/keywords/006300720065.js deleted file mode 100644 index 091d82e..0000000 --- a/Docs/search/keywords/006300720065.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("cre",["Function"],[["createSession",,[["Submission",,,,0,"File:server.py:Submission.createSession","PythonClass:Submission:createSession"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/006400610073.js b/Docs/search/keywords/006400610073.js deleted file mode 100644 index 1eea64b..0000000 --- a/Docs/search/keywords/006400610073.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("das",["Function"],[["dashboard",,[["Submission",,,,0,"File:server.py:Submission.dashboard","PythonClass:Submission:dashboard"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/0064006f0077.js b/Docs/search/keywords/0064006f0077.js deleted file mode 100644 index 7205e16..0000000 --- a/Docs/search/keywords/0064006f0077.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("dow",["Function"],[["download",,[["Submission",,,,0,"File:server.py:Submission.download","PythonClass:Submission:download"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/006500720072.js b/Docs/search/keywords/006500720072.js deleted file mode 100644 index 575a2a3..0000000 --- a/Docs/search/keywords/006500720072.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("err",["Function"],[["error404",,[["Submission",,,,0,"File:server.py:Submission.error404","PythonClass:Submission:error404"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/00660069006c.js b/Docs/search/keywords/00660069006c.js deleted file mode 100644 index 317a997..0000000 --- a/Docs/search/keywords/00660069006c.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("fil",["Function"],[["file_upload",,[["Submission",,,,0,"File:server.py:Submission.file_upload","PythonClass:Submission:file_upload"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/00660075006e.js b/Docs/search/keywords/00660075006e.js deleted file mode 100644 index eaaa235..0000000 --- a/Docs/search/keywords/00660075006e.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("fun",["Function"],[["Function",,[["Submission","contest: Function",,"contest:function",0,"File:server.py:Submission.contest_Function","PythonClass:Submission:contest_Function"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/0068006f006d.js b/Docs/search/keywords/0068006f006d.js deleted file mode 100644 index da37c5e..0000000 --- a/Docs/search/keywords/0068006f006d.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("hom",["Function"],[["home",,[["Submission",,,,0,"File:server.py:Submission.home","PythonClass:Submission:home"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/006c006f0067.js b/Docs/search/keywords/006c006f0067.js deleted file mode 100644 index c9a0d59..0000000 --- a/Docs/search/keywords/006c006f0067.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("log",["Function"],[["loggedIn",,[["Submission",,,,0,"File:server.py:Submission.loggedIn","PythonClass:Submission:loggedIn"]]],["login",,[["Submission",,,,0,"File:server.py:Submission.login","PythonClass:Submission:login"]]],["login_required",,[["Submission",,,,0,"File:server.py:Submission.login_required","PythonClass:Submission:login_required"]]],["logout",,[["Submission",,,,0,"File:server.py:Submission.logout","PythonClass:Submission:logout"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/007100750065.js b/Docs/search/keywords/007100750065.js deleted file mode 100644 index 83ec4d6..0000000 --- a/Docs/search/keywords/007100750065.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("que",["Class","Function"],[["Question",,[[,,,,0,"File:server.py:Question","PythonClass:Question"],["Submission","question",,,1,"File:server.py:Submission.question","PythonClass:Submission:question"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/00720061006e.js b/Docs/search/keywords/00720061006e.js deleted file mode 100644 index 5510e76..0000000 --- a/Docs/search/keywords/00720061006e.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("ran",["Function"],[["rankings",,[["Submission",,,,0,"File:server.py:Submission.rankings","PythonClass:Submission:rankings"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/007200650073.js b/Docs/search/keywords/007200650073.js deleted file mode 100644 index 5a094aa..0000000 --- a/Docs/search/keywords/007200650073.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("res",["Function"],[["resgiter",,[["Submission",,,,0,"File:server.py:Submission.resgiter","PythonClass:Submission:resgiter"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/007300650072.js b/Docs/search/keywords/007300650072.js deleted file mode 100644 index 1d5fe66..0000000 --- a/Docs/search/keywords/007300650072.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("ser",["Function"],[["server_static",,[["Submission",,,,0,"File:server.py:Submission.server_static","PythonClass:Submission:server_static"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/007300650073.js b/Docs/search/keywords/007300650073.js deleted file mode 100644 index 268c954..0000000 --- a/Docs/search/keywords/007300650073.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("ses",["Class"],[["Session",,[[,,,,0,"File:server.py:Session","PythonClass:Session"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/007300750062.js b/Docs/search/keywords/007300750062.js deleted file mode 100644 index b7c0174..0000000 --- a/Docs/search/keywords/007300750062.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("sub",["Class"],[["Submission",,[[,,,,0,"File:server.py:Submission","PythonClass:Submission"]]]]); \ No newline at end of file diff --git a/Docs/search/keywords/007500730065.js b/Docs/search/keywords/007500730065.js deleted file mode 100644 index 520935e..0000000 --- a/Docs/search/keywords/007500730065.js +++ /dev/null @@ -1 +0,0 @@ -NDSearch.OnPrefixDataLoaded("use",["Class"],[["User",,[[,,,,0,"File:server.py:User","PythonClass:User"]]]]); \ No newline at end of file diff --git a/Docs/styles/Default/Default.css b/Docs/styles/Default/Default.css deleted file mode 100644 index 6cc2700..0000000 --- a/Docs/styles/Default/Default.css +++ /dev/null @@ -1,12 +0,0 @@ -/* -This file is part of Natural Docs, which is Copyright © 2003-2018 Code Clear LLC. -Natural Docs is licensed under version 3 of the GNU Affero General Public -License (AGPL). Refer to License.txt or www.naturaldocs.org for the -complete details. - -This file may be distributed with documentation files generated by Natural Docs. -Such documentation is not covered by Natural Docs' copyright and licensing, -and may have its own copyright and distribution terms as decided by its author. -*/ - -html{height:100%;font:10pt "Trebuchet MS",Tahoma,Geneva,sans-serif}body.NDFramePage{background-color:#E0E0E0;margin:0;padding:0}a:link,a:visited{text-decoration:none}a:hover,a:active{text-decoration:underline}table{margin:0;padding:0;border:0 none;border-spacing:0}td{margin:0;padding:0;border:0 none;border-spacing:0;vertical-align:top}#NDLoadingNotice{height:40px;background:URL("images/menu-loading.gif") no-repeat center center}#NDJavaScriptRequiredNotice{margin:20px;text-align:center;font:10pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif}#NDHeader{background-color:#7070C0;padding:.65em .65em .55em .65em;border-bottom:1px solid #7070C0;z-index:2}#HTitle{font:22pt Georgia,serif;text-shadow:0 .1ex .3ex #202020;line-height:90%}#HTitle,#HTitle a:link,#HTitle a:hover,#HTitle a:active,#HTitle a:visited{color:#FFFFFF;text-decoration:none}#HSubtitle{font:10pt Georgia,serif;margin-left:.65em;text-shadow:0 .1ex .3ex #202020}#HSubtitle,#HSubtitle a:link,#HSubtitle a:hover,#HSubtitle a:active,#HSubtitle a:visited{color:#C8C8C8;text-decoration:none}#NDSearchField{z-index:201;width:25ex;color:#000000;font:10pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif;background:#FFFFFF URL("images/search.png") no-repeat left center;padding:.5ex 1.5ex .5ex 3.5ex;border:0 none;-moz-border-radius:5ex;border-radius:5ex;display:none}.IE #NDSearchField{font:inherit}#NDSearchField.DefaultText{color:#808080;font-style:italic}#NDSearchField:focus{outline:none}#NDSearchResults{z-index:200;overflow:auto;font:10pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif;background-color:#FFFFFF;padding:.5ex 0;border-style:solid;border-width:1px;border-color:#BCBCBC #747474 #747474 #BCBCBC;-moz-box-shadow:.15ex .25ex .4ex #606060;-webkit-box-shadow:.15ex .25ex .4ex #606060;box-shadow:.15ex .25ex .4ex #606060}.SeEntry{padding:.2ex 1.25ex .2ex 3.25ex;color:#000000;border-width:1px 0;border-style:solid;border-color:#FFFFFF}.SeEntry:hover{background-color:#E8E8E8}#SeSelectedEntry{background-color:#E8E8E8;border-color:#D0D0D0}a.SeEntry{display:block}a.SeEntry:link,a.SeEntry:hover,a.SeEntry:active,a.SeEntry:visited{color:#000000;text-decoration:none}.SeQualifier,.SeChildCount{font-weight:normal;color:#7C7C7C}.SeParent.open .SeChildCount{display:none}.SeChildren.closed{display:none}.SeChildren .SeEntry{padding-left:5.5ex}.SeEntryIcon{position:absolute;left:1.7ex;width:.8ex;height:.9em;margin-top:2px}.SeChildren .SeEntryIcon{left:3.9ex}.SeParent .SeEntryIcon{margin-top:4px;margin-left:1px;background:url("images/search-parent.png") center center no-repeat}.TClass .SeEntryIcon,.TInterface .SeEntryIcon,.TStruct .SeEntryIcon{width:2ex;height:1em;left:.9ex;background:url("images/search-class.png") center center no-repeat}.SeChildren .TClass .SeEntryIcon,.SeChildren .TInterface .SeEntryIcon,.SeChildren .TStruct .SeEntryIcon{left:3.15ex}.SeEntry.TClass,.SeEntry.TInterface,.SeEntry.TStruct{font-weight:bold}.SeEntry.MoreResults{font-weight:bold;margin-top:.75em}.SeStatus{margin:.25ex 1.25ex;color:#A0A0A0;text-align:center}.SeEntry+.SeStatus,.SeChildren+.SeStatus{margin-top:.75ex;padding-top:.75ex;border-top:1px solid #C0C0C0}.SeStatus.Searching{font-style:italic}#NDMenu{background-color:#E0E0E0;z-index:5;overflow:auto;width:30ex;display:none}.IE7 #NDMenu{overflow-x:hidden}#NDMenu a:hover,#NDMenu a:active{text-decoration:none}.MLoadingNotice{height:20px;background:URL("images/menu-loading.gif") no-repeat center bottom}#MTabBar{background-color:#C0C0C0}.MTab{background-color:#E0E0E0;border-right:1px solid #C0C0C0;border-bottom:1px solid #C0C0C0;display:inline-block;padding:2px 5px;opacity:.55}.MTab:hover{background-color:#EEEEEE;opacity:1}.MTab.Selected{border-bottom:1px solid #E0E0E0;opacity:1}a.MTab:active,a.MTab:focus{outline:0}.IE6 .MTab,.IE7 .MTab,.IE8 .MTab{background-color:#D0D0D0}.IE6 .MTab.Selected,.IE7 .MTab.Selected,.IE8 .MTab.Selected{background-color:#E0E0E0}.IE6 .MTab:hover,.IE7 .MTab:hover,.IE8 .MTab:hover{background-color:#EEEEEE}.MTabIcon{display:inline-block;width:16px;height:16px;position:relative;top:3px}.IE7 .MTabIcon,.IE6 .MTabIcon{top:0}#MFileTab .MTabIcon{background:url("images/menu-tab-files.png") center center no-repeat}#MClassTab .MTabIcon{background:url("images/menu-tab-classes.png") center center no-repeat}#MDatabaseTab .MTabIcon{background:url("images/menu-tab-database.png") center center no-repeat}.MTabTitle{display:inline-block;color:#606060;font:italic 10pt "Trebuchet MS",Tahoma,Geneva,sans-serif;margin:0 4px}.MTab.Narrow .MTabTitle{width:1px;margin:0 -1px 0 0;visibility:hidden}.IE6 .MTab.Narrow .MTabTitle{display:none}.MEntry{display:block;font:10pt "Trebuchet MS",Tahoma,Geneva,sans-serif;padding:.4ex 1.5ex .4ex 3ex}.MEntry,a.MEntry{color:#606060}a.MEntry:hover,a.MEntry:active{background-color:#EEEEEE}.MTabAsFolder{padding-left:1ex}.MFolder{font-weight:bold}.MFolder.Parent{border-bottom:1px solid #C0C0C0}.MFolder.Parent,a.MFolder.Parent{color:#808080}.MFolder.Parent,.MFolder.Selected{padding-left:1.5ex}.MFolder.Parent.Empty{border-bottom-style:dashed;color:#B0B0B0}.MFolder.Child{padding-right:2.5ex}.MFolderIcon{position:absolute;right:0;background:url("images/menu-folder-arrow.png") center center no-repeat;width:6px;height:7px;padding:.8em 1.2em 0 0}.IE6 .MFolderIcon{padding-top:0}.MFolder.Selected{font-weight:bold;background-color:#FFFFFF;border-bottom:3px solid #888888}.MFile.Selected{background-color:#FFFFFF;font-weight:bold}#NDSummary{background-color:#F8F8F8;border-left:1px solid #D8D8D8;border-right:1px solid #E8E8E8;z-index:4;overflow:auto;width:30ex;display:none}#NDSummary a:hover,#NDSummary a:active{text-decoration:none}.SuLoadingNotice{height:20px;background:URL("images/summary-loading.gif") no-repeat center bottom}.SuEntry{display:block;font:10pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif;padding:1px 1.5ex 1px 3.5ex}.SuEntry.first{margin-top:1ex}.SuEntry.last{margin-bottom:2ex}.SuEntry{color:#707070}.SuEntryIcon{position:absolute;left:1.8ex;width:.8ex;height:.9em;margin-top:2px}.SuEntry.TClass,.SuEntry.TInterface,.SuEntry.TStruct,.SuEntry.TSection,.SuEntry.TDatabase,.SuEntry.TDatabaseTable,.SuEntry.TFile.first{font:bold 11pt "Trebuchet MS",Tahoma,Geneva,sans-serif;color:#6B6B6B;padding-left:1.25ex;padding-top:.75ex;padding-bottom:.75ex;margin:2.5ex 0 .5ex 0;line-height:120%;border-bottom:1px solid #D4D4D4}.SuEntry.TClass.first,.SuEntry.TInterface.first,.SuEntry.TStruct.first,.SuEntry.TSection.first,.SuEntry.TDatabase.first,.SuEntry.TDatabaseTable.first,.SuEntry.TFile.first{border-top:0 none;margin-top:0}.SuEntry .Qualifier{font-weight:normal}.SuEntry.TGroup{font:bold 10pt "Trebuchet MS",Tahoma,Geneva,sans-serif;color:#6B6B6B;padding-left:1.5ex;padding-top:.25ex;padding-bottom:.25ex;margin:1.25ex 0 0 0;line-height:120%}.SuEntry.TClass+.SuEntry.TGroup,.SuEntry.TInterface+.SuEntry.TGroup{margin-top:.75ex}a.SuEntry:hover,a.SuEntry:active{background-color:#E6E6E6}#NDMenuSizer,#NDSummarySizer{cursor:e-resize;width:.8ex;z-index:101}#NDMenuSizer:hover,#NDMenuSizer.Dragging{background-color:#F8F8F8;border-left:1px solid #D8D8D8;border-right:1px solid #D8D8D8}#NDSummarySizer:hover,#NDSummarySizer.Dragging{background-color:#FFFFFF;border-right:1px solid #E8E8E8}#NDContentCover{position:fixed;z-index:100;background:url("images/transparent.gif") no-repeat}#NDContent{z-index:3;overflow:hidden;display:none}#CFrame{width:100%;height:100%;border:0 none}body.NDContentPage{background-color:#FFFFFF;padding:.5em 1em;margin:0}.CTopic{margin-bottom:1em;font:10pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif}.CTitle{font:bold 14pt "Trebuchet MS",Tahoma,Geneva,sans-serif;margin:1.5em 0 .5em 0;border-bottom:1px solid #C0C0C0}.CTopic.first .CTitle{margin-top:0}.CTitle .Qualifier{color:#404040;font-weight:normal}.TClass .CTitle,.TInterface .CTitle,.TStruct .CTitle,.TSection .CTitle,.TDatabase .CTitle,.TDatabaseTable .CTitle,.TFile.first .CTitle{font-size:20pt;border-color:#A8A8A8;line-height:110%;padding-bottom:.05em}.TGroup .CTitle{text-transform:uppercase;font-size:16pt;border-bottom:2px solid #000000}.CHeading{font:bold 11pt "Trebuchet MS",Tahoma,Geneva,sans-serif;margin:1.2em 0 .5em 0}.CHeading:first-child{margin-top:0}.CTopic p{margin:0 0 .5em 0;text-indent:4ex}.CTopic a:link,.CTopic a:visited,.CTopic a:hover{color:#880000}.CTopic a:active{color:#F04040}.CTopic ul{margin:0 0 0 6ex;padding:0}.CTopic ul ul{margin:0 0 0 2.5ex}.CTopic li{list-style-type:disc}.CTopic li p{text-indent:0}table.CDefinitionList{margin:0 0 0 4ex}td.CDLEntry{font:bold 10pt "Trebuchet MS",Tahoma,Geneva,sans-serif;padding:0 2ex .5em 0;min-width:18%;line-height:123%}.CDLParameterType{opacity:0.5}td.CDLDefinition p{text-indent:0}.CTopic pre{font:9pt Consolas,"Courier New",monospace;overflow:auto;margin:1em 4.5ex;border-style:solid;border-color:#E0E0E0;border-width:1px 1px 1px 1.5ex;padding:.5ex 1ex}.CBodyNDMarkup{font:8pt Verdana,sans-serif;color:#787800;background-color:#FFFFF0;border:1px solid #A0A000;padding:.5em}.NDPrototype{font:10pt Consolas,"Courier New",monospace;background-color:#FFFFFF;border:1px solid #808080;margin:0 5ex 1em 5ex;padding:.75ex 1.25ex 1.25ex 1.25ex;overflow:auto}.NDPrototype td{white-space:nowrap}.NDPrototype.NarrowForm td.PBeforeParameters,.NDPrototype.NarrowForm td.PAfterParameters,.NDPrototype.NarrowForm td.PDefaultValue{white-space:normal}.NarrowForm table.PParameters td.last{width:100%}.NarrowForm table.PParameters td.first,.NarrowForm.CStyle td.PAfterParameters{padding-left:3.5ex}.WideForm td.PAfterParameters{vertical-align:bottom}.CStyle .PPostPrototypeLine{padding-left:3.5ex}.CDLParameterType{font:8pt Consolas,"Courier New",monospace;white-space:nowrap}.NDPrototype a:link,.NDPrototype a:visited,.NDPrototype a:hover,.NDPrototype a:active,.CDLParameterType a:link,.CDLParameterType a:visited,.CDLParameterType a:hover,.CDLParameterType a:active{color:#000000}.NDPrototype:hover a:link,.NDPrototype:hover a:visited,.NDPrototype:hover a:hover,.NDPrototype:hover a:active,.CDLEntry:hover .CDLParameterType a:link,.CDLEntry:hover .CDLParameterType a:visited,.CDLEntry:hover .CDLParameterType a:hover,.CDLEntry:hover .CDLParameterType a:active{text-decoration:underline}.PNameModifier,.CStyle .PModifierQualifier,.PDefaultValue,.PDefaultValueSeparator{opacity:0.45}.PNameModifier,.CStyle .PModifierQualifier,.CStyle .PNamePrefix{text-align:right}.NDClassPrototype{margin:0 4ex 1em 4ex}.CPEntry{border-width:1px 2px 2px 1px;border-style:solid;border-color:#000000;padding:.5ex 1ex;margin-bottom:4px;-moz-border-radius:1ex;border-radius:1ex;background-color:#FFFFFF;overflow:auto}a.CPEntry,a.CPAdditionalChildrenNotice{display:block}a.CPEntry:link,a.CPEntry:hover,a.CPEntry:visited,a.CPEntry:active{color:#000000;text-decoration:none}a.CPEntry:hover .CPName,a.CPEntry:active .CPName{text-decoration:underline}.NDClassPrototype .CPEntry.Parent{margin-right:3.5ex}.NDClassPrototype.HasChildren .CPEntry.Parent{margin-right:7ex}.NDClassPrototype.HasParents .CPEntry.Current{margin-left:3.5ex}.NDClassPrototype.HasChildren .CPEntry.Current{margin-right:3.5ex}.NDClassPrototype .CPEntry.Child,.NDClassPrototype .CPAdditionalChildrenNotice{margin-left:3.5ex}.NDClassPrototype.HasParents .CPEntry.Child,.NDClassPrototype.HasParents .CPAdditionalChildrenNotice{margin-left:7ex}.CPName{font:bold 11pt "Trebuchet MS",Tahoma,Geneva,sans-serif;line-height:110%}.CPName .Qualifier,.CPName .TemplateSignature{font-weight:normal;color:#282828}.CPEntry.Parent .CPName,.CPEntry.Child .CPName{font-size:10pt}.CPEntry.Parent,.CPEntry.Child{opacity:.5}.CPEntry .CPPrePrototypeLine,.CPEntry .CPModifiers,.CPEntry .CPPostPrototypeLine{font:8pt Consolas,"Courier New",monospace;opacity:.5}.CPEntry.Parent .CPModifiers,.CPEntry.Child .CPModifiers{opacity:.75}.CPEntry .CPPostPrototypeLine{margin-left:4ex}a.CPAdditionalChildrenNotice:link,a.CPAdditionalChildrenNotice:visited,a.CPAdditionalChildrenNotice:hover,a.CPAdditionalChildrenNotice:active{color:#949494;font:italic 10pt "Trebuchet MS",Tahoma,Geneva,sans-serif;padding:0 1.5ex}.CPAdditionalChildren{display:none}.TFunction .NDPrototype,.TOperator .NDPrototype{background-color:#F0F0F0;border-color:#C8C8C8}.TFunction .SuEntryIcon,.TOperator .SuEntryIcon{background-color:#EAEAEA;border:1px solid #C7C7C7}.TFunction .SeEntryIcon,.TOperator .SeEntryIcon{background-color:#ECECEC;border:1px solid #C2C2C2}.TProperty .NDPrototype{background-color:#ECECFF;border-color:#C0C0D6}.TProperty .SuEntryIcon{background-color:#DCDCFF;border:1px solid #BEBED4}.TProperty .SeEntryIcon{background-color:#D8DAFF;border:1px solid #BABAD0}.TVariable .NDPrototype,.TDatabaseField .NDPrototype{background-color:#FCFCE6;border-color:#D2D2B8}.TVariable .SuEntryIcon,.TDatabaseField .SuEntryIcon{background-color:#F9F9C5;border:1px solid #D0D09A}.TVariable .SeEntryIcon,.TDatabaseField .SeEntryIcon{background-color:#F9F9C4;border:1px solid #CFCEB4}.TConstant .NDPrototype{background-color:#CACACA;border-color:#979797}.TConstant .SuEntryIcon{background-color:#C6C6C6;border:1px solid #A6A6A6}.TConstant .SeEntryIcon{background-color:#C6C6C6;border:1px solid #969696}.TType .NDPrototype,.TEnumeration .NDPrototype,.TDelegate .NDPrototype{background-color:#FCEFDE;border-color:#D8CBBA}.TType .SuEntryIcon,.TEnumeration .SuEntryIcon,.TDelegate .SuEntryIcon{background-color:#F7E6D3;border:1px solid #D8C7B3}.TType .SeEntryIcon,.TEnumeration .SeEntryIcon,.TDelegate .SeEntryIcon{background-color:#F5E3D1;border:1px solid #D4C3B2}.TEvent .NDPrototype{background-color:#E6F9E6;border-color:#BCCFBC}.TEvent .SuEntryIcon{background-color:#D3F3D3;border:1px solid #B2D1B1}.TEvent .SeEntryIcon{background-color:#D3F3D3;border:1px solid #B2D1B1}.NDClassPrototype .CPEntry{border-color:#686868;background-color:#EAEAEA}.IE6 .NDClassPrototype .CPEntry.Parent,.IE6 .NDClassPrototype .CPEntry.Child,.IE7 .NDClassPrototype .CPEntry.Parent,.IE7 .NDClassPrototype .CPEntry.Child,.IE8 .NDClassPrototype .CPEntry.Parent,.IE8 .NDClassPrototype .CPEntry.Child{border-color:#B4B4B4;background-color:#F5F5F5}.NDClassPrototype .CPEntry.TInterface{border-color:#686879;background-color:#EAEAFF}.IE6 .NDClassPrototype .CPEntry.TInterface.Parent,.IE6 .NDClassPrototype .CPEntry.TInterface.Child,.IE7 .NDClassPrototype .CPEntry.TInterface.Parent,.IE7 .NDClassPrototype .CPEntry.TInterface.Child,.IE8 .NDClassPrototype .CPEntry.TInterface.Parent,.IE8 .NDClassPrototype .CPEntry.TInterface.Child{border-color:#B3B3BB;background-color:#F5F5FF}.SHComment{color:#808080}.SHKeyword{color:#880000}.SHNumber,.SHString{color:#000088}.SHPreprocessingDirective{color:#000000;font-weight:bold}.SHMetadata{color:#808000}.CPPrePrototypeLine .SHMetadata{color:#484800}.NDToolTip{background-color:#FFFFF0;border-style:solid;border-width:1px;border-color:#A0A193 #57574B #57574B #A0A193;padding:1ex;overflow:hidden;-moz-border-radius:1ex;border-radius:1ex;-moz-box-shadow:.15ex .25ex .4ex #606060;-webkit-box-shadow:.15ex .25ex .4ex #606060;box-shadow:.15ex .25ex .4ex #606060}.NDToolTip .NDPrototype,.NDToolTip .NDClassPrototype{margin:0;overflow:hidden}.NDToolTip .NDClassPrototype .CPEntry{margin-left:0 !important;margin-right:0 !important}.TTSummary{font:10pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif;max-width:75ex}.NDPrototype+.TTSummary{margin-top:.5em}#NDFooter{background-color:#E0E0E0;font:7pt "Trebuchet MS",Tahoma,Geneva,sans-serif;padding:.1em 1ex;text-align:right;z-index:1}#NDFooter,#NDFooter a{color:#808080}#FCopyright,#FTimestamp{display:inline}#FCopyright:after,#FTimestamp:after{white-space:pre;content:" · "}.IE6 #FCopyright,.IE7 #FCopyright,.IE6 #FTimestamp,.IE7 #FTimestamp{margin-right:3ex}#FGeneratedBy{display:inline}body.NDHomePage{padding:0;margin:0;background-color:#E0E0E0;background-image:-moz-linear-gradient(top,#7070C0,#E0E0E0);background-image:-webkit-gradient(linear,left top,left bottom,from(#7070C0),to(#E0E0E0));background-image:-o-linear-gradient(top,#7070C0,#E0E0E0);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#7070C0',endColorstr='#E0E0E0',GradientType=0 );background-image:-ms-linear-gradient(top,#7070C0 0%,#E0E0E0 100%);background-image:linear-gradient(top,#7070C0,#E0E0E0);background-repeat:no-repeat;background-attachment:fixed;height:100%}.HTitle,.HSubtitle,.HCopyright,.HTimestamp,.HGeneratedBy,.NDHomePage p{text-align:center}.HFrame{padding:4em 5em .5em 5em}.HContent{max-width:28em;margin:0 auto 3em auto;padding:1.5em 2em;overflow:hidden;background-color:#FFFFFF;border-width:.5ex;border-style:solid;border-color:#E0E0E0 #A0A0A0 #202020 #C0C0C0;-moz-box-shadow:0 .25ex .75ex #383838;-webkit-box-shadow:0 .25ex .75ex #383838;box-shadow:0 .25ex .75ex #383838}.HTitle{font:34pt Georgia,serif;line-height:95%}.HSubtitle{font:16pt Georgia,serif;padding-top:.075em}.HFooter{margin:0 auto;margin-top:2em;border-top:1px solid #A0A0A0;padding-top:2em;font:8pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif}.HFooter div{margin-bottom:.5em;color:#A0A0A0}.HFooter a:link,.HFooter a:visited,.HFooter a:hover,.HFooter a:active{color:#A0A0A0}#NDMessages{background-color:#FFFFF0;z-index:9999;overflow:auto;max-height:33%;display:none;padding:.8ex 1ex 1ex 1ex;border-bottom:3px solid #A0A000;border-left:1px solid #A0A000}#MsgCloseButton{float:right;font:bold 8pt Verdana,sans-serif;color:#000000}a#MsgCloseButton:hover,a#MsgCloseButton:active{text-decoration:none}.MsgMessage{color:#787800;font:italic 8pt Verdana,sans-serif}.MsgMessage ~ .MsgMessage{padding-top:.9ex;border-top:1px dashed #D0D0C8;margin-top:1.2ex}.IE6 .MTab{border-bottom:0px none}.IE6 #MContent .Selected{background-color:#FFFFFF}.IE6 .NDPrototype .PModifierQualifier,.IE6 .NDPrototype .PType{font:10pt Consolas,"Courier New",monospace;padding:0;border-bottom:0px none}.IE6 .CTopic p,.IE6 .CTopic .CTitle,.IE6 .NDClassPrototype .CPName{color:#000000}.IE6 .NDClassPrototype .CPEntry{margin-top:0}.IE6 .SeEntry{border-bottom:0px none;padding:.2ex 1.25ex .2ex 3.25ex;margin:0;font:10pt Tahoma,Geneva,"Trebuchet MS",Verdana,sans-serif}.IE6 .SeChildren .SeEntry{padding-left:5.5ex}.IE6 #SeSelectedEntry{border-style:solid;border-width:1px} \ No newline at end of file diff --git a/Docs/styles/Default/images/menu-folder-arrow.png b/Docs/styles/Default/images/menu-folder-arrow.png deleted file mode 100644 index 7aec69cf61096371f34ab45df744161eb6cc8935..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ;0V1_0*t`W&k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XG(BA$LpZJ{dw6(UU`}Ey;Zgd>{E@AM)u8kL3$6>Q2|F4W f@U1CJC>3Q0vUKQpq9dyT)WqQF>gTe~DWM4f_4g*T diff --git a/Docs/styles/Default/images/menu-loading.gif b/Docs/styles/Default/images/menu-loading.gif deleted file mode 100644 index d8d06082d06dae6afd1ab85971fd5c7f97a48bfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2087 zcmb7^SyK~f6owPhExlwT30X*tvM8v5umlK8Sj4EPxB!ZxBPz}e3=C+wpp;q}kp8+6 z)6me$*b-K8D_1}*_l3XUzLZzC>mrpFfX|j=p&DVsdiw z!-o$yZrt$u{S-y{e7=s3j@jASBS(%54GkSSbm+{PGrhgNr%s(>7{={(pF4N1s;Vj} zDe1(C6L!0OaB%SG(W5Sx3&(MlN_G7B@rH(m#>U3V%F1WYo(&8P+`M^H5QLK_PhP%! z`ND+@4<9~!^ym=);L@c_3SlozAAFrg!h&Su7TvPIu+X6|dKO`t)f8LF()4Js!{4*w~#rcV=d0 z`uh5g9Xs~+?c2kL4+jE)$B!RBfByXT?c29*-Rke}pPHItS$1S(q`A5I<;#~m&vP6% zH#c|j;>9OVo?O3veR_JjwYBx>)2E%Cof8uickkY9Z*Q0V&nNL8a5ReQOGDD>pDw=-Y&Tu>7!!$xj}y5&)7kkFd`@xA?V1& z)bu3!N3g-7Py-~`Kwx5*fu2@r59OJLguYmlUxF_NmDW&rHUvlBpSAE%`F7AL_)46T2*N&QQ`GkOM#xS zSc{@m;RXZVx?zLa0Jh^s^ZJM?O>hw_e44sC4cw#xK@`T#oA=XTky@>)W7|0j;SXqj z+rL9#RI11|hG^Vs#UYL6Un5SZljNS#98#)^xB zG-0x$WCj~d=S51S`rAsr*SPw_( zc?;H7-6P=E%t&2BH0p4maB@5?4X<}PchSI*np)ssTR19>H=@7p!UV=#5UKYLi6Aj z%Yp~u<57K5l7R;9ganU;wQ^KEUxQ~FiUg+2BlUokCTz9^4`{WRec7^d8fa5eHrm)+ zjv7jl6BXs62Z}dJJs_n?lWD;NN+s5~YE>K!wyju^XJQX>l#<^^{uC#Az?moYfRx5W zD(C^R3*=}3dnnm`9A)AUVj?IoVhf3b!f0_~NW(vXGt&Uh?@y6)l#S2D#GwU796t(; zirWgRC~gn#iw1Ca@oWu8S$HcdE=*v=)kUL4-5?EBgqqO+>gQLgILgSIMX`DWC|eXd zbUmSip!y3A^2=j`4uYabI>;#My>L3?e9*PfuX~ zz(j_pO{eFq86Kqnwn5Dm-4Oye|~-r2h;=%n$nJ!WcE+klisx9F=g-t&WSICo W@u79bx#vK`89ZJ6T-G@yGywocq&Qmu diff --git a/Docs/styles/Default/images/menu-tab-database.png b/Docs/styles/Default/images/menu-tab-database.png deleted file mode 100644 index 01f610829886acbfba9d56300d3e29a34a3555fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X>^xl@Lo7}wSA2ND$gDb}QH@PSMdi=&woW64=}s|4F4@PH zvaP=SF;gvrVWELUDI=qJz#P66lZ4pa)09}58Fovzyxjfx#1x=O44$rjF6*2Ung9-F BFZcie diff --git a/Docs/styles/Default/images/menu-tab-files.png b/Docs/styles/Default/images/menu-tab-files.png deleted file mode 100644 index ebe763ddf3b7e9e054282c1137bffea4f37276f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X%spKkLo7}wSA2ND$gDaeu|RUdgb5$yB`2panDM?~OEQ*O upA@t0kx4^DeZQ20H?zmVW)uAh&5Rdkc71)hDE$!72nJ7AKbLh*2~7a}0x!`3 diff --git a/Docs/styles/Default/images/search-class.png b/Docs/styles/Default/images/search-class.png deleted file mode 100644 index 1494838302cc76c8bb70b0f2d04d0c65f3cb0bdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CN!3HF~3v%Lt6lZ})WHC@o7=#%aX3dcR3MwRf z1o<*BRH-sBG&D0X{QM83UotS18Za=tN?>5Hn!&&zoeWn68+&FEX<$ZXgZ;ZewE#>>lM^GAOAqyIY$xHS)Y%G(=E%3=oU{r{ht YLA6SV|8mQzXFx84r>mdKI;Vst0FPEMT>t<8 diff --git a/Docs/styles/Default/images/search-parent.png b/Docs/styles/Default/images/search-parent.png deleted file mode 100644 index 54d1a8ddd83c057d2fa4c0237aa862321c04241d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^>>$j+3?x7IEPn{3_yc@GT!FNMgTvmvdm9=W{{R1f zAY?-?P>8i8$S)Yk{m<}w8(%O`K(fR&q9iy!t)x7$D3!r6B|j-u!8128JvAsbF{QHb zWU38Nk-VpiV+hCfIN!h@O1Ta JS?83{1OR@AGhzS$ diff --git a/Docs/styles/Default/images/search.png b/Docs/styles/Default/images/search.png deleted file mode 100644 index 6edae9fe84c458cc10b9bb5b80b7a7915ad1775b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmV-e0jK_nP)A`f`0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy`bk7VR5;7+)V~hFKmf<_6Nz{O!r}o8 z7K6kKpk_nGONhb7#AGn{1tb1pkV&6oc+IuY7o#}WU=B0k|%l93fx##!Ydz|my zzD)TwgwPOw62#5T&Ghv2!NI}x_4V%V?$y=R-rnB+{{H3V<@x#f#l^+x>FL?o8BNoJ zgM&_|)8%sI=jW%Sq*yGLxVSimVTy{1tX6ABM@KqUnV&zsd7Yb?l#r-a;STJ7X*AjRKOVY)F%kapF14SZ znjjHTT}z?gs#Pk@@1$P?+r%}t`Zp1LJFosqqiyf*>HR}nOMt$h=#lT(FE1oo%cu+vhvEC+-~*7#amIX=~=w2Dm2ve?9Lr?C~}&T%-_h=GMdfC zqnCw?D!bkI_V(=;c9dg${X$L^lAIj!^P@)}lhK!uUq0slrQIwHFnc?b!;(>4Hk9XSDFt3P?$_XA5qi z3T8|pU@MYIV@U^>3ghN!DP>+a=Ev>Ev;jvH0_MV)be4?f0stwVmeS{O8?X!9Kq2@j z1T~_W0G15n(g9nZmQv|;kYJ1GR8o6oRv} zF)Eg{a=8#co|aPVb>m67-FR{^D+R?YR~q6@K_uq!47IUggh{ z$=nyX6nR>l5+lACJ#OVG5xEtoMCewY5|LYRN`!9ZDG|99r$p#ho)VE;aY}@4sPVmziBz(?-M^|pSRr9?^dtS@UaTTs{R8eG BZwLSY diff --git a/Docs/styles/Default/images/transparent.gif b/Docs/styles/Default/images/transparent.gif deleted file mode 100644 index f191b280ce91e6cb8c387735c10ef9bc5da6c83b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42 ocmZ?wbhEHbWMp7uXkY+=|Ns9h{$ybUF?B!$NQQxl(S^Yp0J!f4_W%F@ diff --git a/Docs/styles/DefaultJS/NDContentPage.js b/Docs/styles/DefaultJS/NDContentPage.js deleted file mode 100644 index 14ecb1f..0000000 --- a/Docs/styles/DefaultJS/NDContentPage.js +++ /dev/null @@ -1,12 +0,0 @@ -/* -This file is part of Natural Docs, which is Copyright © 2003-2018 Code Clear LLC. -Natural Docs is licensed under version 3 of the GNU Affero General Public -License (AGPL). Refer to License.txt or www.naturaldocs.org for the -complete details. - -This file may be distributed with documentation files generated by Natural Docs. -Such documentation is not covered by Natural Docs' copyright and licensing, -and may have its own copyright and distribution terms as decided by its author. -*/ - -"use strict";var NDContentPage=new function(){this.Start=function(){var ieVersion=NDCore.IEVersion();if(ieVersion==undefined||ieVersion>=8){this.CalculateWideFormPrototypeWidths();for(var key in this.wideFormPrototypeWidths){if(this.wideFormPrototypeWidths[key]==0){setTimeout("NDContentPage.Start();",200);return;}}this.ReformatPrototypes();window.onresize=function(){NDContentPage.OnResize();}}this.toolTipHolder=document.createElement("div");this.toolTipHolder.style.display="none";this.toolTipHolder.style.position="fixed";if(ieVersion==6){this.toolTipHolder.style.position="absolute";}this.toolTipHolder.style.zIndex=20;document.body.appendChild(this.toolTipHolder);var ttLocation=location.href;var hashIndex=ttLocation.indexOf('#');if(hashIndex!=-1){ttLocation=ttLocation.substr(0,hashIndex);}ttLocation=ttLocation.substr(0,ttLocation.length-5)+"-ToolTips.js";NDCore.LoadJavaScript(ttLocation);};this.OnResize=function(){if(this.reformatPrototypesTimeout==undefined){this.reformatPrototypesTimeout=setTimeout("NDContentPage.ReformatPrototypes()",200);}};this.GetPrototypeIDNumber=function(element){if(element.id.indexOf("NDPrototype")==0){var id=parseInt(element.id.substr(11),10);if(id!=NaN&&id>0){return id;}}return-1;};this.CalculateWideFormPrototypeWidths=function(){var prototypes=NDCore.GetElementsByClassName(document,"NDPrototype","div");for(var i=0;i=wideFormWidth&&NDCore.HasClass(prototypes[i],"NarrowForm")){NDCore.ChangePrototypeToWideForm(prototypes[i]);}else if(availableWidthdocument.body.offsetWidth){x=document.body.offsetWidth-this.toolTipHolder.offsetWidth-2;if(x<2){x=2;newWidth=document.body.offsetWidth-4;}}NDCore.SetToAbsolutePosition(this.toolTipHolder,x,y,newWidth,undefined);var prototypes=NDCore.GetElementsByClassName(this.toolTipHolder,"NDPrototype","div");if(prototypes.length>0&&NDCore.HasClass(prototypes[0],"WideForm")&&prototypes[0].scrollWidth>prototypes[0].offsetWidth){NDCore.ChangePrototypeToNarrowForm(prototypes[0]);}if(y+this.toolTipHolder.offsetHeight+2>document.body.parentNode.offsetHeight){var newY=linkOffsets.offsetTop-this.toolTipHolder.offsetHeight-scrollParent.scrollTop-5;if(newY>=0){NDCore.SetToAbsolutePosition(this.toolTipHolder,undefined,newY,undefined,undefined);}}this.toolTipHolder.style.visibility="visible";};this.ResetToolTip=function(){if(this.showingToolTip!=undefined){this.toolTipHolder.style.display="none";this.toolTipHolder.style.width=null;this.lastToolTip=this.showingToolTip;this.showingToolTip=undefined;}if(this.toolTipTimeout!=undefined){clearTimeout(this.toolTipTimeout);this.toolTipTimeout=undefined;}};this.wideFormPrototypeWidths={};}; \ No newline at end of file diff --git a/Docs/styles/DefaultJS/NDCore.js b/Docs/styles/DefaultJS/NDCore.js deleted file mode 100644 index a928e52..0000000 --- a/Docs/styles/DefaultJS/NDCore.js +++ /dev/null @@ -1,12 +0,0 @@ -/* -This file is part of Natural Docs, which is Copyright © 2003-2018 Code Clear LLC. -Natural Docs is licensed under version 3 of the GNU Affero General Public -License (AGPL). Refer to License.txt or www.naturaldocs.org for the -complete details. - -This file may be distributed with documentation files generated by Natural Docs. -Such documentation is not covered by Natural Docs' copyright and licensing, -and may have its own copyright and distribution terms as decided by its author. -*/ - -"use strict";var NDCore=new function(){this.GetElementsByClassName=function(baseElement,className,tagHint){if(baseElement.getElementsByClassName){return baseElement.getElementsByClassName(className);}if(!tagHint){tagHint="*";}var tagArray=baseElement.getElementsByTagName(tagHint);var matchArray=new Array();var tagIndex=0;var matchIndex=0;while(tagIndex0){newClassName+=element.className.substr(0,index);}if(index+targetClassName.length!=element.className.length){newClassName+=element.className.substr(index+targetClassName.length);}element.className=newClassName;return;}index=element.className.indexOf(targetClassName,index+1);}};this.LoadJavaScript=function(path,id){var script=document.createElement("script");script.src=path;script.type="text/javascript";if(id!=undefined){script.id=id;}document.getElementsByTagName("head")[0].appendChild(script);};this.RemoveScriptElement=function(id){var script=document.getElementById(id);if(this.IEVersion()==6){setTimeout(function(){script.parentNode.removeChild(script);},1);}else{script.parentNode.removeChild(script);}};this.WindowClientWidth=function(){var width=window.innerWidth;if(width===undefined){width=document.documentElement.clientWidth;}return width;};this.WindowClientHeight=function(){var height=window.innerHeight;if(height===undefined){height=document.documentElement.clientHeight;}return height;};this.SetToAbsolutePosition=function(element,x,y,width,height){if(x!=undefined&&element.offsetLeft!=x){element.style.left=x+"px";}if(y!=undefined&&element.offsetTop!=y){element.style.top=y+"px";}if(width!=undefined&&element.offsetWidth!=width){if(!this.pxRegex.test(element.style.width)){element.style.width=width+"px";if(element.offsetWidth!=width){var adjustment=width-element.offsetWidth;element.style.width=(width+adjustment)+"px";}}else{var styleWidth=RegExp.$1;var adjustment=styleWidth-element.offsetWidth;element.style.width=(width+adjustment)+"px";}}if(height!=undefined&&element.offsetHeight!=height){if(!this.pxRegex.test(element.style.height)){element.style.height=height+"px";if(element.offsetHeight!=height){var adjustment=height-element.offsetHeight;element.style.height=(height+adjustment)+"px";}}else{var styleHeight=RegExp.$1;var adjustment=styleHeight-element.offsetHeight;element.style.height=(height+adjustment)+"px";}}};this.GetFullOffsets=function(element){var result={offsetTop:element.offsetTop,offsetLeft:element.offsetLeft};element=element.offsetParent;while(element!=undefined&&element.nodeName!="BODY"){result.offsetTop+=element.offsetTop;result.offsetLeft+=element.offsetLeft;element=element.offsetParent;}return result;};this.NormalizeHash=function(hashString){if(hashString==undefined){return"";}if(hashString.charAt(0)=="#"){hashString=hashString.substr(1);}hashString=decodeURI(hashString);return hashString;};this.IsIE=function(){return(navigator.userAgent.indexOf("MSIE")!=-1||navigator.userAgent.indexOf("Trident")!=-1);};this.IEVersion=function(){var ieIndex=navigator.userAgent.indexOf("MSIE");if(ieIndex!=-1){ieIndex+=5;}else{ieIndex=navigator.userAgent.indexOf("Trident");if(ieIndex!=-1){ieIndex=navigator.userAgent.indexOf("rv:");if(ieIndex!=-1){ieIndex+=3;}}}if(ieIndex!=-1){return parseInt(navigator.userAgent.substr(ieIndex));}else{return undefined;}};this.AddIEClassesToBody=function(){var ieVersion=this.IEVersion();if(ieVersion!=undefined){this.AddClass(document.body,"IE");if(ieVersion>=6&&ieVersion<=8){this.AddClass(document.body,"IE"+ieVersion);}}};this.SupportsOnInput=function(){if(this.IEVersion()==9){return false;}else{return(window.oninput!==undefined);}};this.ChangePrototypeToNarrowForm=function(prototype){var newPrototype=document.createElement("div");newPrototype.id=prototype.id;newPrototype.className=prototype.className;this.RemoveClass(newPrototype,"WideForm");this.AddClass(newPrototype,"NarrowForm");var prePrototypeLines=NDCore.GetElementsByClassName(prototype,"PPrePrototypeLine","div");for(var i=0;i=other.length&&this.substr(0,other.length)==other);};String.prototype.EntityDecode=function(){var output=this;output=output.replace(/</g,"<");output=output.replace(/>/g,">");output=output.replace(/"/g,"\"");output=output.replace(/&/g,"&");return output;};function NDLocation(hashString){this.Constructor=function(hashString){this.hashString=NDCore.NormalizeHash(hashString);if(this.hashString.match(/^File[0-9]*:/)!=null){this.type="File";this.SplitPathAndMember();this.AddFileURLs();}else if(this.hashString.match(/^[A-Z]+Class:/i)!=null){this.type="Class";this.SplitPathAndMember();this.AddClassURLs();}else if(this.hashString.substr(0,9).toLowerCase()=="database:"){this.type="Database";this.SplitPathAndMember();this.AddDatabaseURLs();}else{this.type="Home";this.AddHomeURLs();}};this.SplitPathAndMember=function(){var pathSeparator=this.hashString.indexOf(':');var memberSeparator=this.hashString.indexOf(':',pathSeparator+1);if(memberSeparator==-1){this.path=this.hashString;}else{this.path=this.hashString.substr(0,memberSeparator);this.member=this.hashString.substr(memberSeparator+1);if(this.member==""){this.member=undefined;}}};this.AddHomeURLs=function(){this.contentPage="other/home.html";};this.AddFileURLs=function(){var pathPrefix=this.path.match(/^File([0-9]*):/);var basePath="files"+pathPrefix[1]+"/"+this.path.substr(pathPrefix[0].length);var lastSeparator=basePath.lastIndexOf('/');var filename=basePath.substr(lastSeparator+1);filename=filename.replace(/\./g,'-');basePath=basePath.substr(0,lastSeparator+1)+filename;this.contentPage=basePath+".html";this.summaryFile=basePath+"-Summary.js";this.summaryTTFile=basePath+"-SummaryToolTips.js";if(this.member!=undefined){this.contentPage+='#'+this.member;}};this.AddClassURLs=function(){var pathPrefix=this.path.match(/^([A-Z]+)Class:/i);var basePath="classes/"+pathPrefix[1]+"/"+this.path.substr(pathPrefix[0].length);basePath=basePath.replace(/\.|::/g,"/");this.contentPage=basePath+".html";this.summaryFile=basePath+"-Summary.js";this.summaryTTFile=basePath+"-SummaryToolTips.js";if(this.member!=undefined){this.contentPage+='#'+this.member;}};this.AddDatabaseURLs=function(){var basePath="database/"+this.path.substr(9);basePath=basePath.replace(/\./g,"/");this.contentPage=basePath+".html";this.summaryFile=basePath+"-Summary.js";this.summaryTTFile=basePath+"-SummaryToolTips.js";if(this.member!=undefined){this.contentPage+='#'+this.member;}};this.Constructor(hashString);};if(!Array.prototype.indexOf){Array.prototype.indexOf=function(searchElement){"use strict";if(this==null){throw new TypeError();}var n,k,t=Object(this),len=t.length>>>0;if(len===0){return-1;}n=0;if(arguments.length>1){n=Number(arguments[1]);if(n!=n){n=0;}else if(n!=0&&n!=Infinity&&n!=-Infinity){n=(n>0||-1)*Math.floor(Math.abs(n));}}if(n>=len){return-1;}for(k=n>=0?n:Math.max(len-Math.abs(n),0);k7));if(supportsOnHashChange){window.onhashchange=function(){NDFramePage.OnHashChange();};}if(!supportsOnHashChange||NDCore.IsIE()){this.hashChangePoller={timeoutLength:200,lastHash:location.hash};if(!NDCore.IsIE()||supportsOnHashChange){this.hashChangePoller.Start=function(){this.Poll();};this.hashChangePoller.Stop=function(){if(this.timeoutID!=undefined){clearTimeout(this.timeoutID);this.timeoutID=undefined;}};this.hashChangePoller.Poll=function(){if(location.hash!=this.lastHash){this.lastHash=location.hash;NDFramePage.OnHashChange();}this.timeoutID=setTimeout("NDFramePage.hashChangePoller.Poll()",this.timeoutLength);};}else{this.hashChangePoller.Start=function(){var iframeElement=document.createElement("iframe");iframeElement.title="empty";iframeElement.tabindex=-1;iframeElement.style.display="none";iframeElement.width=0;iframeElement.height=0;iframeElement.src="javascript:0";this.firstRun=true;iframeElement.attachEvent("onload",function(){if(NDFramePage.hashChangePoller.firstRun){NDFramePage.hashChangePoller.firstRun=false;NDFramePage.hashChangePoller.SetHistory(location.hash);NDFramePage.hashChangePoller.Poll();}});document.body.appendChild(iframeElement);this.iframe=iframeElement.contentWindow;document.onpropertychange=function(){if(event.propertyName=="title"){try{NDFramePage.hashChangePoller.iframe.document.title=document.title;}catch(e){}}};};this.hashChangePoller.Stop=function(){};this.hashChangePoller.Poll=function(){var hash=location.hash;var historyHash=this.GetHistory();if(hash!=this.lastHash){this.lastHash=location.hash;this.SetHistory(hash,historyHash);NDFramePage.OnHashChange();}else if(historyHash!=this.lastHash){location.href=location.href.replace(/#.*/,'')+historyHash;}this.timeoutID=setTimeout("NDFramePage.hashChangePoller.Poll()",this.timeoutLength);};this.hashChangePoller.GetHistory=function(){return this.iframe.location.hash;};this.hashChangePoller.SetHistory=function(hash,historyHash){if(hash!=historyHash){this.iframe.document.title=document.title;this.iframe.document.open();this.iframe.document.close();this.iframe.location.hash=hash;}};}this.hashChangePoller.Start();}};this.OnResize=function(){this.UpdateLayout();};this.UpdateLayout=function(){var ieVersion=NDCore.IEVersion();var useSizers=(ieVersion==undefined||ieVersion>=8);var fullWidth=NDCore.WindowClientWidth();var fullHeight=NDCore.WindowClientHeight();var header=document.getElementById("NDHeader");var searchField=document.getElementById("NDSearchField");var footer=document.getElementById("NDFooter");var menu=document.getElementById("NDMenu");var menuSizer=document.getElementById("NDMenuSizer");var summary=document.getElementById("NDSummary");var summarySizer=document.getElementById("NDSummarySizer");var content=document.getElementById("NDContent");var messages=document.getElementById("NDMessages");NDCore.SetToAbsolutePosition(header,0,0,fullWidth,undefined);NDCore.SetToAbsolutePosition(footer,0,undefined,fullWidth,undefined);var headerHeight=header.offsetHeight-1;var footerHeight=footer.offsetHeight;NDCore.SetToAbsolutePosition(footer,undefined,fullHeight-footerHeight,undefined,undefined);var searchMargin=(headerHeight-searchField.offsetHeight)/2;NDCore.SetToAbsolutePosition(searchField,fullWidth-searchField.offsetWidth-searchMargin,searchMargin,undefined,undefined);var remainingHeight=fullHeight-headerHeight-footerHeight;var remainingWidth=fullWidth;var currentX=0;if(this.MenuIsVisible()){menu.style.display="block";NDCore.SetToAbsolutePosition(menu,currentX,headerHeight,undefined,remainingHeight);currentX+=menu.offsetWidth;remainingWidth-=menu.offsetWidth;if(this.desiredMenuWidth==undefined){this.desiredMenuWidth=menu.offsetWidth;}if(useSizers){menuSizer.style.display="block";NDCore.SetToAbsolutePosition(menuSizer,currentX,headerHeight,undefined,remainingHeight);}NDMenu.OnUpdateLayout();}else{menu.style.display="none";menuSizer.style.display="none";}if(this.SummaryIsVisible()){summary.style.display="block";NDCore.SetToAbsolutePosition(summary,currentX,headerHeight,undefined,remainingHeight);currentX+=summary.offsetWidth;remainingWidth-=summary.offsetWidth;if(this.desiredSummaryWidth==undefined){this.desiredSummaryWidth=summary.offsetWidth;}if(useSizers){summarySizer.style.display="block";NDCore.SetToAbsolutePosition(summarySizer,currentX,headerHeight,undefined,remainingHeight);}}else{summary.style.display="none";summarySizer.style.display="none";}NDCore.SetToAbsolutePosition(content,currentX,headerHeight,remainingWidth,remainingHeight);NDCore.SetToAbsolutePosition(messages,currentX,0,remainingWidth,undefined);NDSearch.OnUpdateLayout();};this.MenuIsVisible=function(){return true;};this.SummaryIsVisible=function(){return(this.currentLocation!=undefined&&this.currentLocation.summaryFile!=undefined);};this.OnMouseDown=function(event){if(event==undefined){event=window.event;}var target=event.target||event.srcElement;if(NDSearch.SearchFieldIsActive()){var targetIsInResults=false;for(var element=target;element!=undefined;element=element.parentNode){if(element.id=="NDSearchResults"){targetIsInResults=true;break;}}if(!targetIsInResults){NDSearch.ClearResults();NDSearch.DeactivateSearchField();}}if(target.id=="NDMenuSizer"||target.id=="NDSummarySizer"){var element;if(target.id=="NDMenuSizer"){element=document.getElementById("NDMenu");}else{element=document.getElementById("NDSummary");}this.sizerDragging={"sizer":target,"element":element,"originalSizerX":target.offsetLeft,"originalElementWidth":element.offsetWidth,"originalClientX":event.clientX};NDCore.AddClass(target,"Dragging");document.onmousemove=function(e){return NDFramePage.OnSizerMouseMove(e);};document.onmouseup=function(e){return NDFramePage.OnSizerMouseUp(e);};document.onselectstart=function(){return false;};var contentCover=document.createElement("div");contentCover.id="NDContentCover";document.body.appendChild(contentCover);NDCore.SetToAbsolutePosition(contentCover,0,0,NDCore.WindowClientWidth(),NDCore.WindowClientHeight());return false;}else{return true;}};this.OnSizerMouseMove=function(event){if(event==undefined){event=window.event;}var offset=event.clientX-this.sizerDragging.originalClientX;var windowClientWidth=NDCore.WindowClientWidth();if(this.sizerDragging.sizer.id=="NDMenuSizer"){if(this.sizerDragging.originalSizerX+offset<0){offset=0-this.sizerDragging.originalSizerX;}else if(this.sizerDragging.originalSizerX+offset+this.sizerDragging.sizer.offsetWidth>windowClientWidth){offset=windowClientWidth-this.sizerDragging.sizer.offsetWidth-this.sizerDragging.originalSizerX;}}else{var menuSizer=document.getElementById("NDMenuSizer");var leftLimit=menuSizer.offsetLeft+menuSizer.offsetWidth;if(this.sizerDragging.originalSizerX+offsetwindowClientWidth){offset=windowClientWidth-this.sizerDragging.sizer.offsetWidth-this.sizerDragging.originalSizerX;}}NDCore.SetToAbsolutePosition(this.sizerDragging.sizer,this.sizerDragging.originalSizerX+offset,undefined,undefined,undefined);NDCore.SetToAbsolutePosition(this.sizerDragging.element,undefined,undefined,this.sizerDragging.originalElementWidth+offset,undefined);if(this.sizerDragging.sizer.id=="NDMenuSizer"){this.desiredMenuWidth=document.getElementById("NDMenu").offsetWidth;}else{this.desiredSummaryWidth=document.getElementById("NDSummary").offsetWidth;}this.UpdateLayout();};this.OnSizerMouseUp=function(event){document.onmousemove=null;document.onmouseup=null;document.onselectstart=null;document.body.removeChild(document.getElementById("NDContentCover"));NDCore.RemoveClass(this.sizerDragging.sizer,"Dragging");this.sizerDragging=undefined;};this.SizeSummaryToContent=function(){this.SizePanelToContent(document.getElementById("NDSummary"),this.desiredSummaryWidth);};this.SizePanelToContent=function(panel,desiredOffsetWidth){if(this.desiredSummaryWidth==undefined){return;}var resized=false;if(panel.clientWidth==panel.scrollWidth){if(panel.offsetWidth==desiredOffsetWidth){return;}else{NDCore.SetToAbsolutePosition(panel,undefined,undefined,desiredOffsetWidth,undefined);resized=true;}}var newOffsetWidth=panel.scrollWidth;if(panel.scrollHeight>panel.clientHeight){newOffsetWidth+=panel.offsetWidth-panel.clientWidth;}else{newOffsetWidth+=NDCore.GetComputedPixelWidth(panel,"borderLeftWidth")+NDCore.GetComputedPixelWidth(panel,"borderRightWidth");}if(newOffsetWidth!=desiredOffsetWidth){newOffsetWidth+=3;if(newOffsetWidth/desiredOffsetWidth>1.333){newOffsetWidth=Math.floor(desiredOffsetWidth*1.333);}if(panel.offsetWidth!=newOffsetWidth){NDCore.SetToAbsolutePosition(panel,undefined,undefined,newOffsetWidth,undefined);resized=true;}}if(resized){this.UpdateLayout();}};}; \ No newline at end of file diff --git a/Docs/styles/DefaultJS/NDMenu.js b/Docs/styles/DefaultJS/NDMenu.js deleted file mode 100644 index 383bfee..0000000 --- a/Docs/styles/DefaultJS/NDMenu.js +++ /dev/null @@ -1,12 +0,0 @@ -/* -This file is part of Natural Docs, which is Copyright © 2003-2018 Code Clear LLC. -Natural Docs is licensed under version 3 of the GNU Affero General Public -License (AGPL). Refer to License.txt or www.naturaldocs.org for the -complete details. - -This file may be distributed with documentation files generated by Natural Docs. -Such documentation is not covered by Natural Docs' copyright and licensing, -and may have its own copyright and distribution terms as decided by its author. -*/ - -"use strict";var NDMenu=new function(){this.Start=function(){this.menuSections=[];this.firstUnusedMenuSection=0;var menuContainer=document.getElementById("NDMenu");var menuTabBar=document.createElement("div");menuTabBar.id="MTabBar";menuContainer.appendChild(menuTabBar);var menuContent=document.createElement("div");menuContent.id="MContent";menuContainer.appendChild(menuContent);NDCore.LoadJavaScript("menu/tabs.js","NDMenuTabsLoader");};this.OnLocationChange=function(oldLocation,newLocation){if(newLocation.type=="Home"&&this.tabs!=undefined&&this.tabs.length==1){this.GoToOffsets([0]);return;}if(oldLocation==undefined||oldLocation.type!=newLocation.type){this.UpdateTabs(newLocation.type);}if(oldLocation==undefined||oldLocation.type!=newLocation.type||oldLocation.path!=newLocation.path){this.Build(new NDMenuHashPath(newLocation.type,newLocation.path));}};this.GoToOffsets=function(offsets){if(this.tabs!=undefined){var newSelectedTab;if(offsets.length>=1){newSelectedTab=this.tabs[offsets[0]][0];if(newSelectedTab!=this.selectedTabType){this.UpdateTabs(newSelectedTab);}}}this.Build(new NDMenuOffsetPath(offsets));};this.Build=function(path){if(path!=undefined){this.pathBeingBuilt=path;}else if(this.pathBeingBuilt==undefined){return;}this.firstUnusedMenuSection=0;var newMenuContent=document.createElement("div");newMenuContent.id="MContent";var result;if(this.tabs!=undefined){result=this.BuildEntries(newMenuContent,this.pathBeingBuilt);}else{result={completed:false};}if(!result.completed){var htmlEntry=document.createElement("div");htmlEntry.className="MLoadingNotice";newMenuContent.appendChild(htmlEntry);}var oldMenuContent=document.getElementById("MContent");var menuContainer=oldMenuContent.parentNode;menuContainer.replaceChild(newMenuContent,oldMenuContent);if(NDCore.IsIE()&&NDCore.IEVersion()==10){setTimeout(function(){document.getElementById("NDMenu").style.zoom="100%";},0);}if(result.completed){if(result.selectedFile){if(result.selectedFile.offsetTop+result.selectedFile.offsetHeight>menuContainer.scrollTop+menuContainer.clientHeight){result.selectedFile.scrollIntoView(false);}else if(result.selectedFile.offsetTop"+""+""+tabTitle+"";htmlMenu.appendChild(htmlEntry);}}else{for(var i=0;i";if(typeof(member[1])=="object"){title+=member[1][0];}else{title+=member[1];}var targetPath=(pathSoFar.length==0?i:pathSoFar.join(",")+","+i);var htmlEntry=document.createElement("a");htmlEntry.className="MEntry MFolder Child";htmlEntry.setAttribute("href","javascript:NDMenu.GoToOffsets(["+targetPath+"])");htmlEntry.innerHTML=title;htmlMenu.appendChild(htmlEntry);}}}result.completed=true;if(selectedTab!=undefined){selectedTab[6]=pathSoFar;}return result;};this.MenuSection=function(file){for(var i=0;i=this.firstUnusedMenuSection){if(i>this.firstUnusedMenuSection){this.menuSections.splice(i,1);this.menuSections.splice(this.firstUnusedMenuSection,0,section);}this.firstUnusedMenuSection++;}if(section.ready==true){return section.contents;}else{return undefined;}}}return undefined;};this.LoadMenuSection=function(file){for(var i=0;i10){for(var i=this.menuSections.length-1;i>=this.firstUnusedMenuSection&&this.menuSections.length>10;i--){if(this.menuSections[i].ready==false){break;}this.menuSections.pop();}}};this.OnTabsLoaded=function(tabs){this.tabs=tabs;NDCore.RemoveScriptElement("NDMenuTabsLoader");var tabBar=document.getElementById("MTabBar");for(var i=0;i"+tabTitle+"";tab.style.position="absolute";tab.style.visibility="hidden";tabBar.appendChild(tab);tabs[i][4]=tab.offsetWidth;tab.className="MTab Narrow";tabs[i][5]=tab.offsetWidth;if(tabs[i][0]==this.selectedTabType){tab.className+=" Selected";}}this.ResizeTabs();if(this.ShouldTabsShow()==false){tabBar.style.display="none";}for(var i=0;i1&&this.selectedTabType!=undefined&&this.selectedTabType!="Home");};this.OnUpdateLayout=function(){this.ResizeTabs();};this.GoToTab=function(newTabType){var tabIndex;for(var i=0;i=this.pathObject.path.length){return;}else if(this.currentContainer==undefined){this.pathIndex++;}else{var currentEntry=this.currentContainer[this.pathObject.path[this.pathIndex]];this.currentContainer=undefined;this.currentContainerHashPath=undefined;this.needToLoad=undefined;if(this.pathIndex==0){this.currentContainerHashPath=currentEntry[2];this.needToLoad=currentEntry[3];}else if(currentEntry[0]==2){this.currentContainerHashPath=currentEntry[2];if(typeof currentEntry[3]=="string"){this.needToLoad=currentEntry[3];}else{this.currentContainer=currentEntry[3];}}this.pathIndex++;if(this.needToLoad!=undefined){this.currentContainer=NDMenu.MenuSection(this.needToLoad);if(this.currentContainer!=undefined){this.needToLoad=undefined;}}}};this.NavigationType=function(){if(this.currentContainer==undefined){return 9;}if(this.pathIndex>=this.pathObject.path.length){return-1;}var currentEntry=this.currentContainer[this.pathObject.path[this.pathIndex]];if(this.InTabs()==false&¤tEntry[0]==1){return 3;}if(this.pathIndex==this.pathObject.path.length-1){return 2;}if(this.pathIndex+2<=this.pathObject.path.length-1){return 1;}var lookahead=this.Duplicate();lookahead.Next();if(lookahead.NavigationType()==9){this.needToLoad=lookahead.NeedToLoad();return 9;}else if(lookahead.CurrentEntry()[0]==2){return 1;}else{return 2;}};this.Duplicate=function(){var newObject=new NDMenuOffsetPathIterator(this.pathObject);newObject.pathIndex=this.pathIndex;newObject.currentContainer=this.currentContainer;newObject.needToLoad=this.needToLoad;return newObject;};this.CurrentEntry=function(){if(this.currentContainer!=undefined&&this.pathIndex0){this.domResults.scrollTop--;}};this.LoadMoreResults=function(){this.moreResultsThreshold=this.visibleEntryCount+25;this.domSearchField.focus();this.Update();};this.ActivateLinkFromKeyboard=function(domLink){var address=domLink.getAttribute("href");if(address.substr(0,11)=="javascript:"){address=address.substr(11);address=address.replace(/^(NDSearch.ToggleParent\([0-9]+,)false(.*)$/,"$1true$2");eval(address);}else{location.href=address;}};this.OnSearchFieldFocus=function(){if(!this.SearchFieldIsActive()){this.ActivateSearchField();if(this.allPrefixesStatus==1){this.allPrefixesStatus=2;NDCore.LoadJavaScript("search/index.js");}}};this.OnSearchFieldKey=function(event){if(event===undefined){event=window.event;}if(event.keyCode==27){this.ClearResults();this.DeactivateSearchField();document.getElementById("CFrame").contentWindow.focus();}else if(event.keyCode==38){if(this.keyboardSelectionIndex<=0){this.keyboardSelectionIndex=this.visibleEntryCount-1;}else{this.keyboardSelectionIndex--;}this.UpdateSelection();}else if(event.keyCode==40){if(this.visibleEntryCount==0){this.keyboardSelectionIndex=-1;}else if(this.keyboardSelectionIndex>=this.visibleEntryCount-1){this.keyboardSelectionIndex=0;}else{this.keyboardSelectionIndex++;}this.UpdateSelection();}else if(event.keyCode==37){if(this.keyboardSelectionIndex!=-1){var domSelectedEntry=document.getElementById("SeSelectedEntry");if(NDCore.HasClass(domSelectedEntry,"SeParent")&&NDCore.HasClass(domSelectedEntry,"open")){this.ActivateLinkFromKeyboard(domSelectedEntry);}}}else if(event.keyCode==39){if(this.keyboardSelectionIndex!=-1){var domSelectedEntry=document.getElementById("SeSelectedEntry");if(NDCore.HasClass(domSelectedEntry,"SeParent")&&NDCore.HasClass(domSelectedEntry,"closed")){this.ActivateLinkFromKeyboard(domSelectedEntry);}}}else if(event.keyCode==13){var domSelectedEntry=undefined;if(this.keyboardSelectionIndex!=-1){domSelectedEntry=document.getElementById("SeSelectedEntry");}else if(this.visibleEntryCount==1){domSelectedEntry=this.domResultsContent.firstChild;}else if(this.visibleEntryCount==2&&NDCore.HasClass(this.domResultsContent.firstChild,"SeParent")){domSelectedEntry=this.domResultsContent.childNodes[1].firstChild;}if(domSelectedEntry!=undefined){this.ActivateLinkFromKeyboard(domSelectedEntry);}else if(this.keyboardSelectionIndex==-1&&this.visibleEntryCount>0){this.keyboardSelectionIndex=0;this.UpdateSelection();}}else if(NDCore.SupportsOnInput()==false){if(event.keyCode!=37&&event.keyCode!=39){this.OnSearchFieldChange(event);}}};this.OnSearchFieldChange=function(event){if(event===undefined){event=window.event;}this.keyboardSelectionIndex=-1;if(this.initialTimeoutStatus==3){if(this.updateTimeout==undefined){this.updateTimeout=setTimeout(function(){clearTimeout(NDSearch.updateTimeout);NDSearch.updateTimeout=undefined;NDSearch.Update();},350);}}else{var searchInterpretations=this.GetSearchInterpretations();if(searchInterpretations.length!=0&&this.allPrefixesStatus==3&&this.GetMatchingPrefixes(searchInterpretations).length<=1){if(this.initialTimeoutStatus==2){clearTimeout(this.initialTimeout);this.initialTimeout=undefined;}this.initialTimeoutStatus=3;this.Update();}else if(this.initialTimeoutStatus==1){this.initialTimeoutStatus=2;this.initialTimeout=setTimeout(function(){if(NDSearch.initialTimeoutStatus==2){clearTimeout(NDSearch.initialTimeout);NDSearch.initialTimeout=undefined;NDSearch.initialTimeoutStatus=3;NDSearch.Update();}},1250);}}};this.OnResultsFocus=function(){this.domSearchField.focus();};this.OnUpdateLayout=function(){if(this.domResults!=undefined){this.PositionResults();if(this.keyboardSelectionIndex!=-1){var domSelectedEntry=document.getElementById("SeSelectedEntry");if(domSelectedEntry!=undefined){this.ScrollEntryIntoView(domSelectedEntry,false);}}}};this.GetSearchInterpretations=function(){var interpretations=[];var normalizedSearchText=this.domSearchField.value.toLowerCase();normalizedSearchText=normalizedSearchText.replace(/\s+/g," ");normalizedSearchText=normalizedSearchText.replace(/^ /,"");normalizedSearchText=normalizedSearchText.replace(/ $/,"");normalizedSearchText=normalizedSearchText.replace(/([^a-z0-9_]) /g,"$1");normalizedSearchText=normalizedSearchText.replace(/ (?=[^a-z0-9_])/g,"");normalizedSearchText=normalizedSearchText.replace(/::|->/g,".");normalizedSearchText=normalizedSearchText.replace(/\\/g,"/");normalizedSearchText=normalizedSearchText.replace(/^[./]+/,"");if(normalizedSearchText==""){return interpretations;}interpretations.push(normalizedSearchText);var lastChar=normalizedSearchText.charAt(normalizedSearchText.length-1);if(lastChar==":"||lastChar=="-"){interpretations.push(normalizedSearchText.substr(0,normalizedSearchText.length-1)+".");}return interpretations;};this.GetMatchingPrefixes=function(searchTextArray){var matchingPrefixes=[];if(this.allPrefixesStatus!=3){return matchingPrefixes;}for(var i=0;i=searchPrefix.length&&this.allPrefixes[prefixIndex].substr(0,searchPrefix.length)==searchPrefix){matchingPrefixes.push(this.allPrefixes[prefixIndex]);prefixIndex++;}else{break;}}}}if(searchTextArray.length<=1){return matchingPrefixes;}matchingPrefixes.sort();for(var i=1;i>1;if(prefix==this.allPrefixes[testIndex]){return testIndex;}else if(prefixmaximum){return true;}}}}}}return false;};this.BuildResults=function(searchInterpretations,searchInterpretationPrefixes,favorClasses,forceExpansion){var results={html:""};this.topLevelEntryCount=0;this.visibleEntryCount=0;var addSearchingStatus=false;for(var p=0;p"+"
"+lastMatchingMemberObject[1];if(lastMatchingMemberObject[0]!=undefined||lastMatchingMemberObject[2]!=undefined){html+="";if(lastMatchingMemberObject[0]!=undefined){html+=", "+lastMatchingMemberObject[0];}if(lastMatchingMemberObject[2]!=undefined){html+=", "+lastMatchingMemberObject[2];}html+="";}html+="";this.topLevelEntryCount++;this.visibleEntryCount++;return html;}else{var selected=(this.keyboardSelectionIndex==this.visibleEntryCount);var openClosed;if(forceExpansion||this.openParents.indexOf(this.topLevelEntryCount)!=-1){openClosed="open";}else{openClosed="closed";}var html=""+"
"+keywordObject[0]+" ("+memberMatches+")"+"
";this.topLevelEntryCount++;this.visibleEntryCount++;if(openClosed=="open"){html+="
";for(var i=0;i"+"
"+memberObject[1];if(memberObject[0]!=undefined||memberObject[2]!=undefined){html+="";if(memberObject[0]!=undefined){html+=", "+memberObject[0];}if(memberObject[2]!=undefined){html+=", "+memberObject[2];}html+="";}html+="";this.visibleEntryCount++;}}html+="
";}return html;}};this.BuildSearchingStatus=function(){return"
"+"Searching..."+"
";};this.BuildNoMatchesStatus=function(){return"
"+"No Matches"+"
";};this.BuildMoreResultsEntry=function(){var selected=(this.keyboardSelectionIndex==this.visibleEntryCount);var html=""+"
"+"More Results..."+"
";this.visibleEntryCount++;this.topLevelEntryCount++;return html;};this.MakePrefix=function(searchText){var prefix="";for(var i=0;i<3;i++){if(i>=searchText.length){break;}var char=searchText.charAt(i);if(char==" "||char=="."||char=="/"){break;}prefix+=char;}if(prefix.length>0){return prefix;}else{return undefined;}};this.PrefixToHex=function(prefix){var hex="";for(var i=0;imaxHeight){NDCore.SetToAbsolutePosition(this.domResults,undefined,undefined,undefined,maxHeight);}if(this.domResults.offsetWidth>maxWidth){NDCore.SetToAbsolutePosition(this.domResults,undefined,undefined,maxWidth,undefined);}else{if(this.domResults.scrollWidth>this.domResults.clientWidth){var newWidth=this.domResults.offsetWidth+(this.domResults.scrollWidth-this.domResults.clientWidth)+5;if(newWidth>maxWidth){newWidth=maxWidth;}NDCore.SetToAbsolutePosition(this.domResults,undefined,undefined,newWidth,undefined);}if(this.domResults.offsetWidthitemTop){offset=itemTop-windowTop;}if(offset!=0){this.domResults.scrollTop+=offset;}};this.OnPrefixIndexLoaded=function(prefixes){this.allPrefixes=prefixes;this.allPrefixesStatus=3;if(this.initialTimeoutStatus==3){this.Update();}};this.LoadPrefixData=function(prefix){if(this.prefixObjects[prefix]==undefined){var prefixObject=[];prefixObject[0]=prefix;prefixObject[2]=false;prefixObject[3]="NDPrefixLoader_"+this.PrefixToHex(prefix);this.prefixObjects[prefix]=prefixObject;NDCore.LoadJavaScript(this.PrefixToDataFile(prefix),prefixObject[3]);}};this.OnPrefixDataLoaded=function(prefix,commentTypes,keywordObjects){var prefixObject=this.prefixObjects[prefix];if(prefixObject==undefined){return;}for(var k=0;k"+entry[3];entryHTML.onmouseover=mouseOverHandler;entryHTML.onmouseout=mouseOutHandler;var entryHTMLChild=entryHTML.firstChild;if(entryHTMLChild!=undefined&&NDCore.HasClass(entryHTMLChild,"Qualifier")){entryHTMLChild.onmouseover=mouseOverHandler;entryHTMLChild.onmouseout=mouseOutHandler;}newContent.appendChild(entryHTML);}}}var summaryContainer=document.getElementById("NDSummary");var oldContent=document.getElementById("SuContent");if(oldContent!=undefined){summaryContainer.replaceChild(newContent,oldContent);}else{summaryContainer.appendChild(newContent);}newContent.scrollIntoView(true);if(this.summaryEntries!=undefined){NDFramePage.SizeSummaryToContent();}if(NDCore.IsIE()&&NDCore.IEVersion()==10){setTimeout(function(){document.getElementById("NDSummary").style.zoom="100%";},0);}};this.FinishIENavigation=function(){if(NDCore.IsIE()&&this.summaryEntries!=undefined&&NDFramePage.currentLocation!=undefined&&NDFramePage.currentLocation.type=="File"&&NDFramePage.currentLocation.member!=undefined){var topicID=-1;for(var i=0;i0){return id;}else{return-1;}};this.ShowToolTip=function(){var entry=document.getElementById("SuEntry"+this.showingToolTip);this.toolTipHolder.innerHTML=this.summaryToolTips[this.showingToolTip];this.toolTipHolder.style.visibility="hidden";this.toolTipHolder.style.display="block";var summaryBlock=document.getElementById("NDSummary");var x=summaryBlock.offsetLeft+entry.offsetLeft+entry.offsetWidth;var y=summaryBlock.offsetTop+entry.offsetTop-summaryBlock.scrollTop;var newWidth=undefined;var maxWidth=NDCore.WindowClientWidth()-x;if(this.toolTipHolder.offsetWidth>maxWidth){newWidth=maxWidth;}NDCore.SetToAbsolutePosition(this.toolTipHolder,x,y,newWidth,undefined);var prototypes=NDCore.GetElementsByClassName(this.toolTipHolder,"NDPrototype","div");if(prototypes.length>0&&NDCore.HasClass(prototypes[0],"WideForm")&&prototypes[0].scrollWidth>prototypes[0].offsetWidth){NDCore.ChangePrototypeToNarrowForm(prototypes[0]);}var footer=document.getElementById("NDFooter");if(y+this.toolTipHolder.offsetHeight+(footer.offsetHeight*2)>NDCore.WindowClientHeight()){var newY=NDCore.WindowClientHeight()-this.toolTipHolder.offsetHeight-(footer.offsetHeight*2);if(newY<0){newY=0;}NDCore.SetToAbsolutePosition(this.toolTipHolder,undefined,newY,undefined,undefined);}this.toolTipHolder.style.visibility="visible";};this.ResetToolTip=function(){if(this.showingToolTip!=undefined){this.toolTipHolder.style.display="none";this.toolTipHolder.style.width=null;this.lastToolTip=this.showingToolTip;this.showingToolTip=undefined;}if(this.toolTipTimeout!=undefined){clearTimeout(this.toolTipTimeout);this.toolTipTimeout=undefined;}};}; \ No newline at end of file diff --git a/Docs/styles/main.css b/Docs/styles/main.css deleted file mode 100644 index 4333a29..0000000 --- a/Docs/styles/main.css +++ /dev/null @@ -1 +0,0 @@ -@import URL("Default/Default.css"); \ No newline at end of file diff --git a/Docs/styles/main.js b/Docs/styles/main.js deleted file mode 100644 index e47a88e..0000000 --- a/Docs/styles/main.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";var NDLoader=new function(){this.JSLinks_All=["DefaultJS/NDCore.js"];this.JSLinks_Frame=["DefaultJS/NDFramePage.js","DefaultJS/NDMenu.js","DefaultJS/NDSummary.js","DefaultJS/NDSearch.js"];this.JSLinks_Content=["DefaultJS/NDContentPage.js"];this.JSLinks_Home=[];this.LoadJS=function(pageType,relativePrefix){this.LoadJSArray(this.JSLinks_All,relativePrefix);this.LoadJSArray(this['JSLinks_'+pageType],relativePrefix);};this.LoadJSArray=function(links,relativePrefix){if(navigator.userAgent.indexOf('KHTML')!=-1){for(var i=0;i');}}else{var head=document.getElementsByTagName('head')[0];for(var i=0;i Date: Mon, 17 Jun 2019 18:01:49 +0530 Subject: [PATCH 9/9] Remove noise and not required docstrings --- server.py | 103 +++++++++--------------------------------------------- 1 file changed, 16 insertions(+), 87 deletions(-) diff --git a/server.py b/server.py index 7d87f03..682ce58 100644 --- a/server.py +++ b/server.py @@ -13,25 +13,19 @@ db = SqliteDatabase(DATABASE_NAME) class User(Model): - """ - Defines username and password for individual user. - """ username = CharField(unique=True) password = CharField() class Meta: - """ - define the database in the main class - """ database = db class Session(Model): """ - Generates randam token for every section - new Token is assigned to every User for every new session + For every new user ,random token is generated,so that the + token is unique for every user """ - + def random_token(): return "".join([random.choice(string.ascii_letters) for _ in range(20)]) @@ -43,12 +37,6 @@ class Meta: class Contest(Model): - """ - Each Contest instance contains:- - Code - Description of contest - Contest start time and End Time - """ code = CharField(unique=True) description = CharField() start_time = DateTimeField() @@ -59,9 +47,6 @@ class Meta: class Question(Model): - """ - Each Question has a Question no and a author associated to it . - """ q_no = IntegerField(unique=True) author = ForeignKeyField(User) @@ -134,10 +119,8 @@ class Meta: end_time=datetime.datetime(day=1, month=10, year=2020), ) -# Create a test User test = User.get_or_create(username="test", password="test") -# Create test Questions q1 = Question.get_or_create(q_no=1, author=test[0]) q2 = Question.get_or_create(q_no=2, author=test[0]) q3 = Question.get_or_create(q_no=3, author=test[0]) @@ -145,8 +128,7 @@ class Meta: q5 = Question.get_or_create(q_no=5, author=test[0]) q6 = Question.get_or_create(q_no=6, author=test[0]) -# Add Questions to contest -"""Contest Problem Instance is created which is used to assign question to specific contests.""" + ContestProblems.get_or_create(contest=practiceContest[0], question=q1[0]) ContestProblems.get_or_create(contest=practiceContest[0], question=q2[0]) ContestProblems.get_or_create(contest=pastContest[0], question=q1[0]) @@ -159,15 +141,6 @@ class Meta: def login_required(function): - """ - Extends the functainality of a funcion by checking log in condition. - Checks if the user is logged in.if not redirect the user to home page - with message 'Login Required' - - : param : Function - : type : method - """ - def login_redirect(*args, **kwargs): if not logggedIn(): return bottle.template("home.html", message="Login required.") @@ -179,24 +152,20 @@ def login_redirect(*args, **kwargs): -@app.route("/")# Sets the url that trigger following function +@app.route("/") def changePath(): - """ redirects to home page """ return bottle.redirect("/home") -@app.get("/home")# Sets the base url as the argument. -def home(): - """ - If Logged in ,redirects to Dashboard of the user - """ +@app.get("/home") +def home(): if logggedIn(): return bottle.redirect("/dashboard") return bottle.template("home.html", message="") -@app.get("/dashboard")# Sets the base url as the argument. -@login_required# Checks if user is logged in or not +@app.get("/dashboard") +@login_required def dashboard(): """ Return the dashboard template to the user @@ -340,12 +309,12 @@ def contest_ranking(code): .switch() .join(ContestProblems, on=(Submission.contestProblem == ContestProblems.id)) .group_by(Submission.user) - .order_by(fn.count(Submission.contestProblem.distinct()).desc())# descending order on basis of no of solution + .order_by(fn.count(Submission.contestProblem.distinct()).desc()) ) order = list(order.tuples()) order = [ (username, score, rank) for rank, (username, score) in enumerate(order, start=1) - ]# associate ranks to each user + ] return bottle.template("rankings.html", people=order) @@ -377,14 +346,7 @@ def rankings(): def logggedIn(): - """ - Downloads the question to local system - :param None - :return : True if Session exixsts for the user Logged In - :return : False if Session not exixst for the user Logged In - or if the s_id is not present or is wrong - """ if not bottle.request.get_cookie("s_id"): return False return ( @@ -396,13 +358,7 @@ def logggedIn(): def createSession(username): - """ - Create a session for the user. - Set up cookie for The current session with seesion id ,token and expiry time. - - :param username: Username for which session is created - :return : Resicts to dashboard of user - """ + try: session = Session.create(user=User.get(User.username == username)) except IntegrityError: @@ -417,13 +373,6 @@ def createSession(username): @app.post("/login") def login(): - """ - This function is called whenever user log in to the app - Checks if the user entered the Right credentials for log in - - :param None: - :return : Redirects to home if invalid credenial Else Creates the session for the user - """ username = bottle.request.forms.get("username") password = bottle.request.forms.get("password") @@ -439,14 +388,7 @@ def login(): @app.post("/register") def register(): - """ - This function is called whenever new user registers - New User is Created in the Data base and his credentials are stored - Checks if the user with same username already exisxts - :param None: - :return : Create session function called for new username. - """ username = bottle.request.forms.get("username") password = bottle.request.forms.get("password") try: @@ -461,13 +403,7 @@ def register(): @app.get("/logout") def logout(): - """ - Ends the session for the user on logout - Deletes the session cookie - : param None: - :return : Redirects to Home Page - """ Session.delete().where(Session.token == bottle.request.get_cookie("s_id")).execute() bottle.response.delete_cookie("s_id") return bottle.redirect("/home") @@ -477,14 +413,7 @@ def logout(): @app.post("/check//") @login_required def file_upload(code, number): - """ - This Function is used to upload the submission to Question to the Server. - :param code: Contest Code - :param number : Question No of which solution is uploaded - :return : "Wrong Answer!! : If solution is wrong - :return : "Solved! Great Job! " : If solution is correct - """ try: contestProblem = ContestProblems.get( ContestProblems.contest == Contest.get(Contest.code == code), @@ -504,23 +433,23 @@ def file_upload(code, number): try: Submission.create( user=user, contestProblem=contestProblem, time=time, is_correct=ans - )# Add Submission For User + ) except: bottle.abort(500, "Error in inserting submission to database.") - if not ans: # if Answer is Wrong + if not ans: return "Wrong Answer!!" else: return "Solved! Great Job! " -@app.error(404) # Checks if app returns an error with error code as argument +@app.error(404) def error404(error): """ Handles Error - :param error : Error rturned the App + :param error : Error returned the App :return : Redirects to Template which Display Error """ return template("error.html", errorcode=error.status_code, errorbody=error.body)