diff --git a/.gitignore b/.gitignore index ecddf57..588695f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ Install/* *.DS_Store *.sublime-project pylintrc +*.sublime-* diff --git a/chrome-plugin/basic.js b/chrome-plugin/basic.js new file mode 100644 index 0000000..dd46d10 --- /dev/null +++ b/chrome-plugin/basic.js @@ -0,0 +1,30 @@ +var languages = [ + { + ext : "c", + name : "C" + }, + { + ext : "cpp", + name : "C++" + }, + { + ext : "java", + name : "Java" + }, + { + ext : "py", + name : "Python" + } +]; + +//Getting the URL of the HTMl Page +var url = document.URL; + +//Removing the trailing punctuation marks +while(url[url.length - 1] === "/" || url[url.length - 1] === "#") +{ + url = url.slice(0, url.length - 1); +} + +//Spliting the URL to get path +var us = url.split("/"); diff --git a/chrome-plugin/code_later.js b/chrome-plugin/code_later.js deleted file mode 100644 index 6ae56a9..0000000 --- a/chrome-plugin/code_later.js +++ /dev/null @@ -1,225 +0,0 @@ -//Getting the URL of the HTMl Page -var url = document.URL - -//Removing the trailing punctuation marks -while(url[url.length - 1] === "/" || url[url.length - 1] === "#") -{ - url = url.slice(0, url.length - 1); -} - -//Spliting the URL to get path -var us = url.split("/"); - -var website = us[2].split(".") -for(i = 0; i < website.length; i++) -{ - if (website[i] === "codechef" || website[i] === "spoj" || website[i] === "codeforces" || website[i] === "hackerearth") - { - website = website[i]; - } -} - -function click_codechef(language) -{ - console.log(language + " Code Now Clicked. Opening " + language + " IDE"); - var prob_name = document.title.split("|")[0].trim(); - var prob_url = url; - var user_code = document.getElementById("user-bar").getElementsByTagName('span')[0]; - var u_name = ""; - //Checking if User is LoggedIn - if(user_code.innerHTML.search("logout") == -1) - { - //No Logged In User Detected - u_name = "No User"; - } - else - { - //A user is logged in - u_name = user_code.textContent.replace("Hello ", "").trim().split('!')[0]; - } - //Sending Message to the native host with a json object of problem details - chrome.runtime.sendMessage({problem_name: prob_name, problem_url: prob_url, user_name: u_name, lang : language}); -} - -function click_spoj(language) -{ - console.log(language + " Code Now Clicked. Opening " + language + " IDE"); - var prob_name = document.getElementsByClassName("prob")[0].getElementsByTagName("h2")[0].innerHTML; - prob_name = prob_name.split('-')[1].slice(1); - // prog.py throws encoding error if spaces are not removed - prob_name = prob_name.replace(/\s/g, '-'); - - var prob_url = url; - var u_name = ""; - if(document.getElementsByClassName("text-success")[0].innerText.search("sign in")!=-1) - { - u_name = "No User"; - } - else - { - u_name = document.getElementsByClassName("username_dropdown")[0].innerText.trim(); - } - chrome.runtime.sendMessage({problem_name: prob_name, problem_url: prob_url, user_name: u_name, lang : language}); -} - -function click_codeforces(language) -{ - console.log(language + " Code Now Clicked. Opening " + language + " IDE"); - var prob_name = document.getElementById('pageContent').getElementsByClassName('title')[0].innerHTML.split('.')[1].trim(); - var prob_url = url; - var u_name = ""; - var head_div = document.getElementById('header').getElementsByClassName('lang-chooser')[0].getElementsByTagName('div')[1]; - var reg_link = head_div.getElementsByTagName('a')[1].innerHTML.toLowerCase(); - if(reg_link == "register") - { - u_name = "No User"; - } - else - { - u_name = head_div.getElementsByTagName('a')[0].innerHTML.toLowerCase(); - } - chrome.runtime.sendMessage({problem_name: prob_name, problem_url: prob_url, user_name: u_name, lang : language}); -} - -function click_hackerearth(language) -{ - console.log(language + " Code Now Clicked. Opening " + language + " IDE"); - var prob_name = document.getElementsByClassName('problem-title')[0].innerHTML; - var prob_url = url; - var u_name = ""; - var login_link = document.getElementsByClassName('track-header-login show-modal'); - - // If login link exists - if(login_link.length !== 0) - { - u_name = "No User"; - } - else - { - u_name = document.getElementsByClassName('track-header-profile-box')[0].getAttribute('href').split('@')[1]; - } - chrome.runtime.sendMessage({problem_name: prob_name, problem_url: prob_url, user_name: u_name, lang : language}); - -} - - -// Helper function to add codechef buttons -var codechef_interval = null; -function add_codechef_buttons() -{ - if (document.getElementById('problem-page-top') == null) return; - else { - document.getElementById('problem-page-top').getElementsByTagName('ul').item(0).innerHTML = document.getElementById('problem-page-top').getElementsByTagName('ul').item(0).innerHTML - +"
  • Code in Java
  • " - +"
  • Code in C
  • " - +"
  • Code in C++
  • " - +"
  • Code in Python
  • "; - - console.log("Code Now Button Added !! ~ Code Now Extension"); - //Adding listener for Java Button - document.getElementById("code_now_id_java_button").onclick = function(){ click_codechef("java"); }; - - //Adding Listener for C Button - document.getElementById("code_now_id_c_button").onclick = function(){ click_codechef("c"); }; - - //Adding Button for C++ Button - document.getElementById("code_now_id_c++_button").onclick = function(){ click_codechef("cpp"); }; - - //Adding Button for Python Button - document.getElementById("code_now_id_python_button").onclick = function(){ click_codechef("py"); }; - - clearInterval(codechef_interval); - } -} - -//Checking if it is CodeChef Problem Page -if(us.length > 4 && website === "codechef" && us[us.length - 2] === "problems") -{ - //Excluding the Special Codes in CodeChef Problem Regex - These url indicate a list of problems rather than a particular problem - var code = us[us.length - 1]; - if(code !== "easy" && code !== "medium" && code !== "hard" && code !== "challenge" && code !== "extcontest" && code !== "school") - { - // Adding A little sleep here because codechef mutates DOM to add all elements dynamically - codechef_interval = window.setInterval(add_codechef_buttons, 5000); - } -} - -//Checking for Spoj Problem Pages -else if(us.length > 4 && website === "spoj" && us[us.length - 2] === "problems") -{ - //Again Avoiding Special URLs - var code = us[us.length - 2]; - if(code !== "classical" && code !== "challenge" && code !== "partial" && code !== "tutorial" && code !== "riddle") - { - document.getElementById("problem-btn-submit-box").innerHTML+= - "" - + "" - + "" - + ""; - - console.log("Code Now Button Added !! ~ Code Now Extension"); - - document.getElementById("code_now_id_java_button").onclick = function(){ click_spoj("java"); }; - document.getElementById("code_now_id_c_button").onclick = function(){ click_spoj("c"); }; - document.getElementById("code_now_id_c++_button").onclick = function(){ click_spoj("cpp"); }; - document.getElementById("code_now_id_python_button").onclick = function(){ click_spoj("py"); }; - } -} - -//Checking for Codeforces Problem Page -else if(us.length > 4 && website === "codeforces" && (us[us.length - 2] === "problem" || us[us.length - 3] === "problem")) -{ - //Creating and Adding A whole new Sidebox with 3 buttons - var sidebar = document.getElementById('sidebar') - sidebar.innerHTML = - '' - + sidebar.innerHTML; - - console.log("Code Now Button Added !! ~ Code Now Extension"); - - document.getElementById("code_now_id_java_button").onclick = function() { click_codeforces("java"); }; - document.getElementById("code_now_id_c_button").onclick = function(){ click_codeforces("c"); }; - document.getElementById("code_now_id_c++_button").onclick = function(){ click_codeforces("cpp"); }; - document.getElementById("code_now_id_python_button").onclick = function(){ click_codeforces("py"); }; -} - -//Checking page for hackerearth problem page -else if (us.length > 4 && website === 'hackerearth' && us[3] === "problem") { - // base DOM element to which buttons are appended - var base = document.getElementsByClassName("editor-utility content medium-margin")[0]; - var add_button = document.createElement("div"); - - add_button.innerHTML = - "" - + "" - + "" - + ""; - - //Add buttons to base element - base.appendChild(add_button); - - console.log("Code Now Button Added !! ~ Code Now Extension"); - - document.getElementById("code_now_id_java_button").onclick = function(){ click_hackerearth("java"); }; - document.getElementById("code_now_id_c_button").onclick = function(){ click_hackerearth("c"); }; - document.getElementById("code_now_id_c++_button").onclick = function(){ click_hackerearth("cpp"); }; - document.getElementById("code_now_id_python_button").onclick = function(){ click_hackerearth("py"); }; -} diff --git a/chrome-plugin/codechef_problem.js b/chrome-plugin/codechef_problem.js new file mode 100644 index 0000000..f5e6f12 --- /dev/null +++ b/chrome-plugin/codechef_problem.js @@ -0,0 +1,63 @@ +//Helper function to get click_functions +function click_codechef(language) +{ + return function () { + console.log(language + " Code Now Clicked. Opening " + language + " IDE"); + var prob_name = $('title')[0].text.split('|')[0].trim(); + var prob_url = url; + var u_name = ""; + //Checking if User is LoggedIn + if($('#user-bar span.login-box').length > 0) + { + //No Logged In User Detected + u_name = "No User"; + } + else + { + //A user is logged in + u_name = $('#user-bar span').text().split('!')[0].replace('Hello', '').trim(); + } + //Sending Message to the native host with a json object of problem details + chrome.runtime.sendMessage({problem_name: prob_name, problem_url: prob_url, user_name: u_name, lang : language}); + }; +} + +// Helper function to add codechef buttons +var codechef_interval = null; +function add_codechef_buttons() +{ + if ($('#problem-page-top').length === 0) + { + // This means that the page hasn't loaded completely yet. So Wait + return; + } + else + { + // Dynamic DOM Created by codechef + var button_list = $("#problem-page-top").find("ul"); + var html = button_list.html(); + // Adding Language Button + for (var i = 0; i < languages.length; i++) + { + html += "
  • Code in " + languages[i].name + "
  • "; + } + button_list.html(html); + + //Adding Listeners + for(var j = 0; j < languages.length; j++) + { + $("#code_now_id_" + languages[j].ext + "_button").click(click_codechef(languages[j].ext)); + } + console.log("Code Now Button Added !! ~ Code Now Extension"); + + // Clear interval, so that buttons are not added repeatedly + clearInterval(codechef_interval); + } +} + +var code = us[us.length - 1]; +if(us[us.length - 2] === "problems" && code !== "easy" && code !== "medium" && code !== "hard" && code !== "challenge" && code !== "extcontest" && code !== "school") +{ + // Adding A little sleep here because codechef mutates DOM to add all elements dynamically + codechef_interval = window.setInterval(add_codechef_buttons, 5000); +} diff --git a/chrome-plugin/codeforces_problem.js b/chrome-plugin/codeforces_problem.js new file mode 100644 index 0000000..3167d7a --- /dev/null +++ b/chrome-plugin/codeforces_problem.js @@ -0,0 +1,53 @@ +function click_codeforces(language) +{ + return function() { + console.log(language + " Code Now Clicked. Opening " + language + " IDE"); + var prob_name = $('#pageContent .title').html().split('.')[1].trim(); + var prob_url = url; + var u_name = ""; + var reg_link = $('#header .lang-chooser div')[1].children[1].text.toLowerCase(); + if(reg_link == "register") + { + u_name = "No User"; + } + else + { + u_name = $('#header .lang-chooser div')[1].children[0].text.toLowerCase(); + } + chrome.runtime.sendMessage({problem_name: prob_name, problem_url: prob_url, user_name: u_name, lang : language}); + }; +} + +if(us.length > 4 && (us[us.length - 2] === "problem" || us[us.length - 3] === "problem")) +{ + //Creating and Adding A whole new Sidebox with 3 buttons + $('#sidebar').html( + '' + + $('#sidebar').html); + + for(var i = 0; i < languages.length; i++) + { + var button = $('