def render_table(submissions, duplicates=[], user_id=None): """ Create the HTML table from submissions @param submissions (Dict): Dictionary of submissions to display @param duplicates (List): List of duplicate user ids @return (TABLE): HTML TABLE containing all the submissions """ T = current.T status_dict = { "AC": "Accepted", "WA": "Wrong Answer", "TLE": "Time Limit Exceeded", "MLE": "Memory Limit Exceeded", "RE": "Runtime Error", "CE": "Compile Error", "SK": "Skipped", "HCK": "Hacked", "PS": "Partially Solved", "OTH": "Others" } table = TABLE(_class="bordered centered submissions-table") table.append( THEAD( TR(TH(T("Name")), TH(T("Site Profile")), TH(T("Time of submission")), TH(T("Problem")), TH(T("Language")), TH(T("Status")), TH(T("Points")), TH(T("View/Download Code"))))) tbody = TBODY() # Dictionary to optimize lookup for solved and unsolved problems # Multiple lookups in the main set is bad plink_to_class = {} for submission in submissions: span = SPAN() if submission.user_id: person_id = submission.user_id else: person_id = submission.custom_user_id # Check if the given custom_user is a duplicate # We need to do this because there might be a case # when a duplicate custom_user is created and then # his name or institute is changed for duplicate in duplicates: if duplicate[1] == person_id and duplicate[0]: person_id = current.db.custom_friend(duplicate[0]) break span = SPAN(_class="orange tooltipped", data={"position": "right", "delay": "50", "tooltip": T("Custom User")}, _style="cursor: pointer; " + \ "float:right; " + \ "height:10px; " + \ "width:10px; " + \ "border-radius: 50%;") tr = TR() append = tr.append append( TD( DIV( span, A(person_id.first_name + " " + person_id.last_name, _href=URL("user", "profile", args=person_id.stopstalk_handle, extension=False), _class="submission-user-name", _target="_blank")))) append(TD(A(IMG(_src=current.get_static_url("images/" + \ submission.site.lower() + \ "_small.png"), _style="height: 30px; width: 30px;"), _class="submission-site-profile", _href=current.get_profile_url(submission.site, submission.site_handle), _target="_blank"))) append(TD(submission.time_stamp, _class="stopstalk-timestamp")) link_class = "" plink = submission.problem_link if plink_to_class.has_key(plink): link_class = plink_to_class[plink] else: link_class = get_link_class(plink, user_id) plink_to_class[plink] = link_class link_title = (" ".join(link_class.split("-"))).capitalize() append( TD( problem_widget(submission.problem_name, submission.problem_link, link_class, link_title))) append(TD(submission.lang)) append( TD( IMG(_src=current.get_static_url("images/" + submission.status + ".jpg"), _title=status_dict[submission.status], _alt=status_dict[submission.status], _class="status-icon"))) append(TD(submission.points)) if submission.view_link: submission_data = { "view-link": submission.view_link, "site": submission.site } button_class = "btn waves-light waves-effect" if current.auth.is_logged_in(): if submission.site != "HackerEarth": td = TD(BUTTON(T("View"), _class="view-submission-button " + button_class, _style="background-color: #FF5722", data=submission_data), " ", BUTTON(T("Download"), _class="download-submission-button " + \ button_class, _style="background-color: #2196F3", data=submission_data)) else: td = TD( A(T("View"), _href=submission.view_link, _class="btn waves-light waves-effect", _style="background-color: #FF5722", _target="_blank")) append(td) else: append( TD( BUTTON(T("View"), _class="btn tooltipped disabled", _style="background-color: #FF5722", data={ "position": "bottom", "delay": "50", "tooltip": T("Login to View") }), " ", BUTTON(T("Download"), _class="btn tooltipped disabled", _style="background-color: #2196F3", data={ "position": "bottom", "delay": "50", "tooltip": T("Login to Download") }))) else: append(TD()) tbody.append(tr) table.append(tbody) return table
def render_table(submissions, duplicates=[]): """ Create the HTML table from submissions @param submissions (Dict): Dictionary of submissions to display @param duplicates (List): List of duplicate user ids @return (TABLE): HTML TABLE containing all the submissions """ status_dict = {"AC": "Accepted", "WA": "Wrong Answer", "TLE": "Time Limit Exceeded", "MLE": "Memory Limit Exceeded", "RE": "Runtime Error", "CE": "Compile Error", "SK": "Skipped", "HCK": "Hacked", "PS": "Partially Solved", "OTH": "Others"} table = TABLE(_class="bordered centered") table.append(THEAD(TR(TH("Name"), TH("Site Profile"), TH("Time of submission"), TH("Problem"), TH("Language"), TH("Status"), TH("Points"), TH("View/Download Code")))) tbody = TBODY() # Dictionary to optimize lookup for solved and unsolved problems # Multiple lookups in the main set is bad plink_to_class = {} for submission in submissions: span = SPAN() if submission.user_id: person_id = submission.user_id else: person_id = submission.custom_user_id # Check if the given custom_user is a duplicate # We need to do this because there might be a case # when a duplicate custom_user is created and then # his name or institute is changed for duplicate in duplicates: if duplicate[1] == person_id and duplicate[0]: person_id = current.db.custom_friend(duplicate[0]) break span = SPAN(_class="orange tooltipped", data={"position": "right", "delay": "50", "tooltip": "Custom User"}, _style="cursor: pointer; " + \ "float:right; " + \ "height:10px; " + \ "width:10px; " + \ "border-radius: 50%;") tr = TR() append = tr.append append(TD(DIV(span, A(person_id.first_name + " " + person_id.last_name, _href=URL("user", "profile", args=person_id.stopstalk_handle, extension=False), _target="_blank")))) append(TD(A(IMG(_src=URL("static", "images/" + \ submission.site.lower() + \ "_small.png"), _style="height: 30px; width: 30px;"), _href=current.get_profile_url(submission.site, submission.site_handle), _target="_blank"))) append(TD(submission.time_stamp, _class="stopstalk-timestamp")) link_class = "" plink = submission.problem_link if plink_to_class.has_key(plink): link_class = plink_to_class[plink] else: if plink in current.solved_problems: link_class = "solved-problem" elif plink in current.unsolved_problems: link_class = "unsolved-problem" else: # This will prevent from further lookups link_class = "unattempted-problem" plink_to_class[plink] = link_class link_title = (" ".join(link_class.split("-"))).capitalize() append(TD(A(submission.problem_name, _href=URL("problems", "index", vars={"pname": submission.problem_name, "plink": submission.problem_link}, extension=False), _class=link_class, _title=link_title, _target="_blank"))) append(TD(submission.lang)) append(TD(IMG(_src=URL("static", "images/" + submission.status + ".jpg", extension=False), _title=status_dict[submission.status], _alt=status_dict[submission.status], _style="height: 25px; width: 25px;"))) append(TD(submission.points)) if submission.view_link: submission_data = {"view-link": submission.view_link, "site": submission.site} button_class = "btn waves-light waves-effect" if current.auth.is_logged_in(): if submission.site != "HackerEarth": td = TD(BUTTON("View", _class="view-submission-button " + button_class, _style="background-color: #FF5722", data=submission_data), " ", BUTTON("Download", _class="download-submission-button " + \ button_class, _style="background-color: #2196F3", data=submission_data)) else: td = TD(A("View", _href=submission.view_link, _class="btn waves-light waves-effect", _style="background-color: #FF5722", _target="_blank")) append(td) else: append(TD(BUTTON("View", _class="btn tooltipped disabled", _style="background-color: #FF5722", data={"position": "bottom", "delay": "50", "tooltip": "Login to View"}), " ", BUTTON("Download", _class="btn tooltipped disabled", _style="background-color: #2196F3", data={"position": "bottom", "delay": "50", "tooltip": "Login to Download"}))) else: append(TD()) tbody.append(tr) table.append(tbody) return table