您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Jquery commands to get data from forms, ala datatel
当前为
- // ==UserScript==
- // @name bcc-to-gdocs
- // @description Jquery commands to get data from forms, ala datatel
- // @include https://go.bergen.edu/WebAdvisor/WebAdvisor?TOKENIDX*&APP=ST&CONSTITUENCY=WBFC
- // @require https://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js
- // @namespace https://greasyfork.org/scripts/4752-bcc-to-gdocs
- // @version 0.0.1.20140902214734
- // ==/UserScript==
- /* On WebAdvisor class rosters add buttons for BCC faculty to display student names
- ** in easily cut-and-pasted to spreadsheet form, and automatically create the spreadsheet
- ** in Google Docs. I am using the ClientLogin functions from http://userscripts.org/scripts/show/27673
- ** which was written by Michael Freeman and AJAX functions from
- ** http://gdatatips.blogspot.com/2009/07/create-new-google-docs-spreadsheet-from.html
- ** by Eric from Google.
- ** and loads of JQuery
- */
- /*
- ** Professor of Art and Animation
- ** Francis Scrubjay Schmidt 2009, updated 2011, updated 2014
- ** Bergen Community College
- */
- var gdocsbuttonfront = '<input name="GDOCS" class="gdocsbutton" value=" To GoogleDocs " id=';
- var gdocsbuttonback = ' class="Button"> </td>'; //WebAdvisor looking button straight to gdocs
- var rollcallbuttonfront = '<input name="GDOCSROLLCALL" class="rollcallbutton" value=" Roll Call " id=';
- var rollcallbuttonback = ' class="Button"> </td>'; //WebAdvisor looking button straight to gdocs
- var login = '<p> Gmail Login         <input id="name" size=24 type="text"> </p>'; //Gmail user name
- var password = '<p> Gmail Password   <input id="password" size=24 type="password"> </p>'; //Google password
- var cellbuttonfront = '<td> <input name="C&P" class="rostbutton" value=" Roster '; // first half names button
- var cellbuttonmiddle = '" id="'; // middle of button
- var cellbuttonback = '" class="shortButton">'; // back half names button
- var cellblank = '<th class=" FranAdded"> <div> <p id="blank"> <input type="hidden" name="blank" value="o"> </p> </div> </th>';
- var classname = []; //where the classname will go
- var csv = ''; //where the csv version is
- var names = "";
- var hrefs = [];//the URLS for AJAX student names
- var hoursroom = [];//class meeting times and room
- var term = [];//term
- // Gdocs login stuff at top of page
- $('<TextNode textContent="Class Roster Select Section">').each(function () { // Make sure we are on the right page
- $('<p>   </p>').appendTo("#screenTitle span:contains('Class Roster Select Section')"); // make a line between
- $(login).appendTo("#screenTitle span:contains('Class Roster Select Section')"); // put username
- $(password).appendTo("#screenTitle span:contains('Class Roster Select Section')"); // put password
- // Place to attach buttons for each class
- $("#GROUP_Grp_LIST_VAR2").each(function () { // find the table with the classnames
- var classcount = 0;
- $(this).find('table').each(function () { // find the main table
- $(this).find('tr:first').each(function () { // find the header
- $(this).prepend(cellblank); // add a spacer to match rows
- });
- $(this).find('tr:gt(0):not(:has(th))').each(function () { // get rows greater than header (0)
- classcount ++; //increment the class #
- $(this).prepend(gdocsbuttonfront + classcount + gdocsbuttonback + rollcallbuttonfront + classcount + rollcallbuttonback + cellbuttonfront + classcount + cellbuttonmiddle + classcount + cellbuttonback); // put the button in to grab and print student names
- hoursroom[classcount] = $(this).find('.LIST_VAR6 > div > p').text();//the hours and room
- term[classcount] = $(this).find('.LIST_VAR4 > div > p').text();// get the term
- $(this).find('td:visible').each(function () { //get each cell of the row
- $(this).find('a').each(function () { // grabs 'a' tags, with URL of student names for course
- classname[classcount] = $(this).text(); //for the popup window
- hrefs[classcount] = $(this).attr("href"); // gets the actual URL
- });
- });
- }); // end class row reads
- }); // end table read
- // What the Roster button does
- $(".rostbutton").click(function(){ // Action for class roster button to be pushed to make window
- var target = $(this).attr("id"); //get the # of the row, assign to 'target'
- $.get(hrefs[target], function(data){ //AJAX get url data
- var rosternames = $(data).find('#GROUP_Grp_LIST_VAR7').html();//student name class table data
- myWindow = window.open('', 'MyNewWindow', 'width=900,height=500,left=100,top=100,scrollbars= 1'); // makes popup
- myWindow.document.write('<html><head><title>' + classname[target]+'</title></head><body><font face="geneva, helvetica, arial"><div><table>' + rosternames + '</table></div></font></body></html>'); // page html
- myWindow.document.close();
- myWindow.focus();
- });
- });
- $(".rollcallbutton").click(function() { // Action for rollcall button when clicked do this
- // login modified from http://userscripts.org/scripts/show/27673
- // ajax modified from http://gdatatips.blogspot.com/2009/07/create-new-google-docs-spreadsheet-from.html
- var gauthURL = 'https://www.google.com/accounts/ClientLogin'; // using clientlogin method from google api
- var gToken = ''; // where the string that lets us authenticate lives
- var loginInfo = 'accountType=HOSTED_OR_GOOGLE&service=writely&source=bcc-to-gdocs-Francis-Schmidt'; // header stuff for xml
- var target = $(this).attr("id");
- $.get(hrefs[target], function(data){ //AJAX get url data
- $(data).find('#GROUP_Grp_LIST_VAR7').each(function (){
- csv = "1,3,," + '\n';
- csv += "Name,ID Number," + '\n'; //header row for csv
- $(this).find('tr:gt(1)').each(function () {
- csv += '"'+$(this).find('td.LIST_VAR7 > div > a ').text()+'"' + ','; //student name for csv
- csv += $(this).find('td.LIST_VAR6 > div > p').text() + '\n'; //student # for csv
- });
- }); //end student name class table data
- }); //end AJAX response
- //These pieces form the xml that is sent to google docs
- var atom = ["<?xml version='1.0' encoding='UTF-8'?>",
- '<entry xmlns="http://www.w3.org/2005/Atom">',
- '<category scheme="http://schemas.google.com/g/2005#kind"',
- ' term="http://schemas.google.com/docs/2007#spreadsheet"/>',
- '<title>', "$ROLLCALL " + term[target] + " " + classname[target], '</title>', //name the spreadsheet after the classname
- '</entry>'].join('');
- var body = ['--END_OF_PART\r\n',
- 'Content-Type: application/atom+xml;\r\n\r\n',
- atom, '\r\n',
- '--END_OF_PART\r\n',
- 'Content-Type: text/csv\r\n\r\n',
- csv, '\r\n', // the actual data from webadvisor
- '--END_OF_PART--\r\n'].join('');
- //logininfo has the useremail and password added to the xml needed for authentication
- loginInfo = loginInfo + '&Email=' + $("#name").val();
- loginInfo = loginInfo + '&Passwd=' + $("#password").val();
- GM_xmlhttpRequest({ // greasemonkey xml
- method: 'POST',
- url: gauthURL,
- headers: {
- 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
- 'Content-type': 'application/x-www-form-urlencoded'
- },
- data: loginInfo, // the authentication
- onload: function(responseDetails){
- if(responseDetails.status != 200) { // failure
- alert('Whoa. Did you log in? \n\n Error: ' + responseDetails.status + ': ' + responseDetails.statusText);
- }
- if (responseDetails.status == 200) { // 200 means we are successful, so we send up the spreadsheet
- tokenText = responseDetails.responseText; // get the text
- gToken = tokenText.match(/Auth=[a-z0-9_-]+/i); // turn it into our token
- GM_xmlhttpRequest({ // let's light this candle
- method: 'POST',
- url: 'http://docs.google.com/feeds/documents/private/full',
- headers: {
- 'Authorization': 'GoogleLogin ' + gToken,
- 'Content-Type': 'multipart/related; boundary=END_OF_PART',
- 'Slug': term[target] + " " + classname[target] +'.csv'
- }, // proves we are allowed to, and says what we are going to do
- contentType: 'multipart/related; boundary=END_OF_PART',
- data: body, //the xml we made above, called body
- dataType: 'xml',
- onload: function(responseDetails){
- if (responseDetails.status == 201) { // success!
- alert('Spreadsheet named ' + "$ROLLCALL"+ term[target] + " " + classname[target] + '\n is now in ' + $("#name").val() + ' docs account');
- }
- if(responseDetails.status != 201) { // failure ;(
- alert('Whoops! There was a problem \n\n Error: ' + responseDetails.status + ': ' + responseDetails.statusText);
- }
- showLoad(false);
- }
- });//end putting stuff up on google
- }
- }
- });
- }); //end rollcall button
- $(".gdocsbutton").click(function() { // Action for gdocs button when clicked do this
- // login modified from http://userscripts.org/scripts/show/27673
- // ajax modified from http://gdatatips.blogspot.com/2009/07/create-new-google-docs-spreadsheet-from.html
- var gauthURL = 'https://www.google.com/accounts/ClientLogin'; // using clientlogin method from google api
- var gToken = ''; // where the string that lets us authenticate lives
- var loginInfo = 'accountType=HOSTED_OR_GOOGLE&service=writely&source=bcc-to-gdocs-Francis-Schmidt'; // header stuff for xml
- var target = $(this).attr("id");
- $.get(hrefs[target], function(data){ //AJAX get url data
- $(data).find('#GROUP_Grp_LIST_VAR7').each(function (){
- csv = '"' + hoursroom[target] + '"' + '\n';
- csv += "Name,ID Number,Email Address,Phone Number" + '\n'; //header row for csv
- $(this).find('tr:gt(1)').each(function () {
- csv += '"'+$(this).find('td.LIST_VAR7 > div > a ').text()+'"' + ','; //student # for csv
- csv += $(this).find('td.LIST_VAR6 > div > p').text() + ','; //student # for csv
- csv += $(this).find('td.LIST_VAR8 > div > a ').text() + ','; //student # for csv
- csv += $(this).find('td.VAR_LIST1 > div > p').text() + '\n'; //student # for csv
- });
- }); //end student name class table data
- }); //end AJAX response
- //These pieces form the xml that is sent to google docs
- var atom = ["<?xml version='1.0' encoding='UTF-8'?>",
- '<entry xmlns="http://www.w3.org/2005/Atom">',
- '<category scheme="http://schemas.google.com/g/2005#kind"',
- ' term="http://schemas.google.com/docs/2007#spreadsheet"/>',
- '<title>', term[target] + " " + classname[target], '</title>', //name the spreadsheet after the classname
- '</entry>'].join('');
- var body = ['--END_OF_PART\r\n',
- 'Content-Type: application/atom+xml;\r\n\r\n',
- atom, '\r\n',
- '--END_OF_PART\r\n',
- 'Content-Type: text/csv\r\n\r\n',
- csv, '\r\n', // the actual data from webadvisor
- '--END_OF_PART--\r\n'].join('');
- //logininfo has the useremail and password added to the xml needed for authentication
- loginInfo = loginInfo + '&Email=' + $("#name").val();
- loginInfo = loginInfo + '&Passwd=' + $("#password").val();
- GM_xmlhttpRequest({ // greasemonkey xml
- method: 'POST',
- url: gauthURL,
- headers: {
- 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
- 'Content-type': 'application/x-www-form-urlencoded'
- },
- data: loginInfo, // the authentication
- onload: function(responseDetails){
- if(responseDetails.status != 200) { // failure
- alert('Whoa. Did you log in? \n\n Error: ' + responseDetails.status + ': ' + responseDetails.statusText);
- }
- if (responseDetails.status == 200) { // 200 means we are successful, so we send up the spreadsheet
- tokenText = responseDetails.responseText; // get the text
- gToken = tokenText.match(/Auth=[a-z0-9_-]+/i); // turn it into our token
- GM_xmlhttpRequest({ // let's light this candle
- method: 'POST',
- url: 'http://docs.google.com/feeds/documents/private/full',
- headers: {
- 'Authorization': 'GoogleLogin ' + gToken,
- 'Content-Type': 'multipart/related; boundary=END_OF_PART',
- 'Slug': term[target] + " " + classname[target] +'.csv'
- }, // proves we are allowed to, and says what we are going to do
- contentType: 'multipart/related; boundary=END_OF_PART',
- data: body, //the xml we made above, called body
- dataType: 'xml',
- onload: function(responseDetails){
- if (responseDetails.status == 201) { // success!
- alert('Spreadsheet named ' + term[target] + " " + classname[target] + '\n is now in ' + $("#name").val() + ' docs account');
- }
- if(responseDetails.status != 201) { // failure ;(
- alert('Whoops! There was a problem \n\n Error: ' + responseDetails.status + ': ' + responseDetails.statusText);
- }
- showLoad(false);
- }
- });//end putting stuff up on google
- }
- }
- });
- }); //end google docs button
- }); // end main table read
- });