From 6b139f5b662a6baf7265ce4cb7e29b808f2cb955 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Tue, 24 May 2022 22:38:42 +1000 Subject: [PATCH 01/91] added permissions table header handler --- canvasBetter.js | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index e9533ef..12e4332 100644 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -1,8 +1,8 @@ // ==UserScript== -// @name DG Tools - PAW-15414 +// @name Solutions Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 20220104_01 +// @version 20220524 // @description try to take over the world! // @author Daniel Gilogley, Zoe Bogner // @match https://*.test.instructure.com/* @@ -14,6 +14,8 @@ // @exclude https://reports.instructure.com/* // @grant GM_getValue // @grant GM_setValue +// @run-at document-idle +// @require https://gist.github.com/raw/2625891/waitForKeyElements.js // ==/UserScript== @@ -38,10 +40,10 @@ function myJQueryCode() { if (document.location.hostname.indexOf('instructure.com') >= 0) { $(document).ready(function() { //add the settings link - $('#menu > li:last').after(''); + $('#menu > li:last').after(''); //add the DG Tools link - $('#menu > li:last').after(''); + $('#menu > li:last').after(''); //remove the images if on the old UI remove the images if ($('#menu > li:contains("Dashboard")').length <= 0) { @@ -301,7 +303,7 @@ function myJQueryCode() { $('li.ic-app-header__menu-list-item--active').attr('class', "menu-item ic-app-header__menu-list-item"); $('li#dg_li_self').attr('class', "menu-item ic-app-header__menu-list-item ic-app-header__menu-list-item--active"); - document.title = "DG - Update User SIS id from one to another"; + document.title = "Solutions Tools - Update User SIS id from one to another"; $('#main').html('

Update User SIS id from one to another

Old SIS ID / Canvas ID New SIS ID Console Log



Useful links;
'); $('button#dg_updateGo').click(function(e) { @@ -334,8 +336,8 @@ function myJQueryCode() { } }); } else if(document.location.pathname.toLowerCase() === "/dgtools2") { - document.title = "DG Tools"; - $('#main').html('

DG Tools

DG Tools are the best!
' + + document.title = "Solutions Tools"; + $('#main').html('

Solutions Tools

Solutions Tools are the best!
' + '

Links

Tools

+ +
  • EUROPE (Frankfurt) +
      +
    • +
    • +
    • +
  • From 084013567bc183f44a8a4e369ecc84d8cc68ca5b Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Thu, 25 May 2023 15:45:52 +1000 Subject: [PATCH 56/91] added link to github tag for version number --- canvasBetter.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 0f39ebe..83f59e6 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023052501 +// @version 2023052502 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -40,7 +40,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023052501'; + var _cx_tools_version = '2023052502'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -403,7 +403,7 @@ function myJQueryCode() {

    Canvas Experience (CX) Tools

    - CX Tools are the best! Version: _VERSION_ + CX Tools are the best! Version: _VERSION_
    From 64dbe71069a3f483aec6b99cb87fad8daa9a2d40 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Mon, 19 Jun 2023 16:59:30 +1000 Subject: [PATCH 57/91] cleaning up Create Sandboxes options --- canvasBetter.js | 69 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 60 insertions(+), 9 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 83f59e6..4d52a57 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -1,8 +1,8 @@ // ==UserScript== -// @name Canvas Experience (CX) Tools +// @name Canvas Experience (CX) Tools DEV // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023052502 +// @version 2023061901 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -40,7 +40,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023052502'; + var _cx_tools_version = '2023061901'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -587,12 +587,57 @@ function myJQueryCode() { _cx_tools_on = true; document.title="CX Tools - Create Sandboxes"; - $('#main').html('

    Create Users

  • User ID



    Console Log

    Useful links;
    '); - //Create canavs101 Button - $('#cx_button_create_canvas101').click(function(){ - $('#cx_button_create_canvas101').attr('disabled','disabled'); - var createCanvas101 = createCanvasCourse("Canvas 101","canvas101","sandbox","Growing With Canvas",null); - }); + const _create_sandboxes_html_tpl = ` +
    +

    Create Sandboxes

    +
    +

    Actions

    + + + + +
    +
      +
    • +
    • +
    • +
      +

      Create sandbox courses for each user below:

      +

      User ID(s)

      + +

      You can choose to enrol these users into the "Canvas 101 (Growing with Canvas)" course too.
      + + +

      + +
      +
    • +
    +
    + +

    API token

    + +
    + +

    Console Log

    + +
    + +
    +

    Useful links

    + +
    +
    +
    + `.trim(); + var _create_sandboxes_html = _create_sandboxes_html_tpl.replaceAll('_userToken_', userToken); + $('#main').html(_create_sandboxes_html); //Create Sandbox Account $('#cx_button_create_sandbox').click(function(){ @@ -600,6 +645,12 @@ function myJQueryCode() { var createSandbox = createSandboxAccount(); }); + //Create canavs101 Button + $('#cx_button_create_canvas101').click(function(){ + $('#cx_button_create_canvas101').attr('disabled','disabled'); + var createCanvas101 = createCanvasCourse("Canvas 101","canvas101","sandbox","Growing With Canvas",null); + }); + //create Sandboxes function $('#cx_create_sandboxes').click(function(){ $('#cx_create_sandboxes, #cx_user_id, #cx_canvas101').attr('disabled','disabled'); From 3042a85987d7ea6652bf088a3930957670d603b4 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Thu, 10 Aug 2023 14:28:39 +1000 Subject: [PATCH 58/91] Correcting SiteAdmin only settings also adding a background color to each SiteAdmin setting --- canvasBetter.js | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 4d52a57..6557c30 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools DEV // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023061901 +// @version 2023081002 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -40,7 +40,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023061901'; + var _cx_tools_version = '2023081002'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -200,29 +200,40 @@ function myJQueryCode() { // Adding identifiers to items that only SiteAdmin users can change $('#account_settings tr td > label[for=account_settings_mfa_settings]').parent().prepend(admin_shield_svg); - $('#account_settings tr td > label[for=account_settings_mfa_settings]').parent().parent().css('border', '1px dashed red'); + $('#account_settings tr td > label[for=account_settings_mfa_settings]').parent().parent().css('border', '1px dashed red').css('background-color', '#FFCECE'); - $('#account_settings > div > label[for=account_settings_increase_calendar_limit]').append(admin_shield_svg); + $('#account_settings > div > label[for=account_settings_increase_calendar_limit]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('#account_settings > fieldset.account_domains > legend:contains(Canvas Cloud Information)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg); + $('#account_settings > fieldset.account_domains > legend:contains(Canvas Cloud Information)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Acceptable Use Policy)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg); + $('#account_settings > fieldset > legend:contains(Acceptable Use Policy)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).css('background-color', '#FFCECE'); // Features - group the ones that are Site Admin specific // comment for "Canvas for Elementary" var _site_admin_div = $('#account_settings > fieldset > legend:contains(Features)').parent('fieldset').find('div').slice(1,3).wrapAll('
    ').parent(); - _site_admin_div.prepend(admin_shield_svg); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_turnitin]').append(admin_shield_svg); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_services_account_survey_notifications]').append(admin_shield_svg); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_services_beta_for_students]').append(admin_shield_svg); - - $('#account_settings > fieldset#add_sis_app_token > legend:contains(SIS Agent Token Authentication)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg); - - $('#account_settings > fieldset#external_integration_keys > legend:contains(External Integration Keys)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg); - - $('nav ul#section-tabs > li > a:contains(Domain Lookups)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg); - $('nav ul#section-tabs > li > a:contains(SFTP User)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg); + _site_admin_div.prepend(admin_shield_svg).css('background-color', '#FFCECE'); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_admins_can_change_passwords]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_admins_can_view_notifications]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_eportfolios]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_allow_sis_import]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_include_integration_ids_in_gradebook_exports]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_allow_invitation_previews]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_alerts]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_global_includes]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_show_scheduler]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_profiles]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_limit_parent_app_web_access]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_turnitin]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_services_account_survey_notifications]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_services_beta_for_students]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + + $('#account_settings > fieldset#add_sis_app_token > legend:contains(SIS Agent Token Authentication)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + + $('#account_settings > fieldset#external_integration_keys > legend:contains(External Integration Keys)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + + $('nav ul#section-tabs > li > a:contains(Domain Lookups)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('nav ul#section-tabs > li > a:contains(SFTP User)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); // END - adding SiteAdmin user shield From d4d725c565ce76f1733e659d709c87c9fc379de6 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Thu, 10 Aug 2023 17:13:22 +1000 Subject: [PATCH 59/91] fixing @name attribute of the UserScript --- canvasBetter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/canvasBetter.js b/canvasBetter.js index 6557c30..8449f5a 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -1,5 +1,5 @@ // ==UserScript== -// @name Canvas Experience (CX) Tools DEV +// @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* // @version 2023081002 From 2590eead717bed36a7e8a7779b3ab7cbfb04fb7e Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Fri, 11 Aug 2023 18:02:46 +1000 Subject: [PATCH 60/91] adding in "setting definition" links for the account settings page --- canvasBetter.js | 84 +++++++++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 38 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 6557c30..ef16c2f 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -1,8 +1,8 @@ // ==UserScript== -// @name Canvas Experience (CX) Tools DEV +// @name Canvas Experience (CX) Tools - setting-details // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023081002 +// @version 2023081101 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -40,7 +40,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023081002'; + var _cx_tools_version = '2023081101'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -65,6 +65,8 @@ function myJQueryCode() { const re_settings=/\/accounts\/(\d+|self)\/settings/; const re_perms=/\/accounts\/[^\/]+\/permissions/; + const sa_setting_hl_colour='#fdf3f3'; + // if on the settings page if ( document.location.pathname.toLowerCase().match(re_settings) !== null ) { @@ -196,44 +198,50 @@ function myJQueryCode() { }); //----------End do the apply default button ----------------------- - const admin_shield_svg = ''; + const admin_shield_svg = ''; // Adding identifiers to items that only SiteAdmin users can change $('#account_settings tr td > label[for=account_settings_mfa_settings]').parent().prepend(admin_shield_svg); - $('#account_settings tr td > label[for=account_settings_mfa_settings]').parent().parent().css('border', '1px dashed red').css('background-color', '#FFCECE'); - - - $('#account_settings > div > label[for=account_settings_increase_calendar_limit]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - - $('#account_settings > fieldset.account_domains > legend:contains(Canvas Cloud Information)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).css('background-color', '#FFCECE'); - - $('#account_settings > fieldset > legend:contains(Acceptable Use Policy)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).css('background-color', '#FFCECE'); - - // Features - group the ones that are Site Admin specific - // comment for "Canvas for Elementary" - var _site_admin_div = $('#account_settings > fieldset > legend:contains(Features)').parent('fieldset').find('div').slice(1,3).wrapAll('
    ').parent(); - _site_admin_div.prepend(admin_shield_svg).css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_admins_can_change_passwords]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_admins_can_view_notifications]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_eportfolios]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_allow_sis_import]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_include_integration_ids_in_gradebook_exports]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_allow_invitation_previews]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_alerts]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_global_includes]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_show_scheduler]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_profiles]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_limit_parent_app_web_access]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_turnitin]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_services_account_survey_notifications]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_services_beta_for_students]').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - - $('#account_settings > fieldset#add_sis_app_token > legend:contains(SIS Agent Token Authentication)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - - $('#account_settings > fieldset#external_integration_keys > legend:contains(External Integration Keys)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - - $('nav ul#section-tabs > li > a:contains(Domain Lookups)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); - $('nav ul#section-tabs > li > a:contains(SFTP User)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', '#FFCECE'); + $('#account_settings tr td > label[for=account_settings_mfa_settings]').parent().parent().css('border', '1px dashed red').css('background-color', sa_setting_hl_colour); + $('#account_settings tr td > label[for=account_settings_mfa_settings]').parent().next().append(''); + + + $('#account_settings > div > label[for=account_settings_increase_calendar_limit]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + + $('#account_settings > fieldset.account_domains > legend:contains(Canvas Cloud Information)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).css('background-color', sa_setting_hl_colour).next().append(''); + $('#account_settings > fieldset.account_domains > legend:contains(Canvas Cloud Information)').next().append(admin_shield_svg).css('background-color', sa_setting_hl_colour); + $('#account_settings > fieldset.account_domains > select').after(admin_shield_svg).css('background-color', sa_setting_hl_colour); + $('#account_settings > fieldset.account_domains > ul li.new_domain button.add_domain_button').after(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour); + $('#account_settings > fieldset.account_domains > div').append(admin_shield_svg).css('background-color', sa_setting_hl_colour); + + $('#account_settings > fieldset > legend:contains(Acceptable Use Policy)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).css('background-color', sa_setting_hl_colour).after(''); + +// Canvas for Elementary is available to an account admin, removing this one +// // Features - group the ones that are Site Admin specific +// // comment for "Canvas for Elementary" +// var _site_admin_div = $('#account_settings > fieldset > legend:contains(Features)').parent('fieldset').find('div').slice(1,3).wrapAll('
    ').parent(); + // _site_admin_div.prepend(admin_shield_svg).css('background-color', sa_setting_hl_colour).prepend(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_admins_can_change_passwords]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_admins_can_view_notifications]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_eportfolios]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_allow_sis_import]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_include_integration_ids_in_gradebook_exports]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_allow_invitation_previews]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_alerts]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_global_includes]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).prepend(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_show_scheduler]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_profiles]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_limit_parent_app_web_access]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_turnitin]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_services_account_survey_notifications]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_services_beta_for_students]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + + $('#account_settings > fieldset#add_sis_app_token > legend:contains(SIS Agent Token Authentication)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).prepend(''); + + $('#account_settings > fieldset#external_integration_keys > legend:contains(External Integration Keys)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).prepend(''); + + $('nav ul#section-tabs > li > a:contains(Domain Lookups)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour); + $('nav ul#section-tabs > li > a:contains(SFTP User)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour); // END - adding SiteAdmin user shield From cdde97f6c6baf3e9b295f47a69a6c4c582589a5b Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Wed, 16 Aug 2023 16:59:41 +1000 Subject: [PATCH 61/91] adding extra setting to SiteAdmin settings --- canvasBetter.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 9e7f15a..e8962fb 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023081101 +// @version 2023081602 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -40,7 +40,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023081101'; + var _cx_tools_version = '2023081602'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -205,6 +205,7 @@ function myJQueryCode() { $('#account_settings tr td > label[for=account_settings_mfa_settings]').parent().parent().css('border', '1px dashed red').css('background-color', sa_setting_hl_colour); $('#account_settings tr td > label[for=account_settings_mfa_settings]').parent().next().append(''); + $('#account_settings tr td > label[for=account_settings_include_students_in_global_survey]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); $('#account_settings > div > label[for=account_settings_increase_calendar_limit]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); From 5a5e1b0884fb51d5e1193ee3d5f1ee2d4171ed8d Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Thu, 17 Aug 2023 22:17:22 +1000 Subject: [PATCH 62/91] added icon --- canvasBetter.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index e8962fb..df615d5 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023081602 +// @version 2023081701 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -20,6 +20,7 @@ // @run-at document-idle // @require https://gist.github.com/raw/2625891/waitForKeyElements.js // @resource customCSS https://raw.githubusercontent.com/clmcavaney/CX-Tools/master/canvasBetter.css +// @icon https://www.google.com/s2/favicons?sz=64&domain=instructure.com // ==/UserScript== @@ -40,7 +41,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023081602'; + var _cx_tools_version = '2023081701'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { From 98d102a0ad64eed0b8476e465222eded4aafbb3c Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Thu, 24 Aug 2023 10:35:38 +1000 Subject: [PATCH 63/91] assets/processing-animation.gif --- assets/processing-animation.gif | Bin 0 -> 77236 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 assets/processing-animation.gif diff --git a/assets/processing-animation.gif b/assets/processing-animation.gif new file mode 100755 index 0000000000000000000000000000000000000000..8bee3c5aee3aefda6975e6f03816958c94a0ec1f GIT binary patch literal 77236 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 G^Zx?5b!)x= literal 0 HcmV?d00001 From 325324f750c3a767c3a76d8ad308d262493dfb1d Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Thu, 24 Aug 2023 10:59:38 +1000 Subject: [PATCH 64/91] new class for processing animation --- canvasBetter.css | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/canvasBetter.css b/canvasBetter.css index 909aea2..e5a0d79 100644 --- a/canvasBetter.css +++ b/canvasBetter.css @@ -29,3 +29,14 @@ -moz-osx-font-smoothing: grayscale; text-shadow: 1px 1px 1px rgba(0,0,0,0.004); } + +#cx_processing { + position: fixed; + top: 115; + right: 55px; + z-index: 999; +} + +#cx_processing img { + width: 128px; +} From 7df26136ed1afe938f8e5d4cabb8e033d33c7a58 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Thu, 24 Aug 2023 11:15:38 +1000 Subject: [PATCH 65/91] new Canvas Commons adjusted the install LTI process a little - also providing better feedback --- canvasBetter.js | 71 ++++++++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 31 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index df615d5..cb97077 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023081701 +// @version 2023082401 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -41,7 +41,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023081701'; + var _cx_tools_version = '2023082401'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -249,6 +249,7 @@ function myJQueryCode() { + // 20230824 - I think this code below no longer works - may remove it on a future release //Changes to the 'Apps' tab - only if you click on my settings link, and did not navigate there natuarally $('#account_settings_tabs > ul > li:contains("Apps"):first > a:first').click(function(a) { a.preventDefault(); @@ -442,12 +443,12 @@ function myJQueryCode() {

  • Error Reports for this instance
  • Tools

    +
      -
    • -
    • Sydney
      • +
      • @@ -457,6 +458,7 @@ function myJQueryCode() {
      • Singapore
          +
        • @@ -469,14 +471,15 @@ function myJQueryCode() {
        • -
        -
      • -
      • EUROPE (Frankfurt) -
          -
        • -
        • -
        • -
        • +
        +
      • +
      • EUROPE (Frankfurt) +
          +
        • +
        • +
        • +
        • +
      @@ -493,19 +496,20 @@ function myJQueryCode() { var _main_menu_html = _main_menu_html_tpl.replaceAll("_VERSION_", _cx_tools_version).replaceAll('_userToken_', userToken); $('#main').html(_main_menu_html); - //LTI Buttons Function - $('li.cx_action_lti').click(function(e){ + // LTI Buttons Function + $('li.cx_action_lti button').click(function(e){ e.preventDefault(); console.log("Installing this Tool: " + $(this).text()); - console.log("Key: " + $("button", this).attr("key")); - console.log("Secret: " + $("button", this).attr("secret")); - console.log("URL: " + $("button", this).attr("url")); + console.log("Key: " + $(this).attr("key")); + console.log("Secret: " + $(this).attr("secret")); + console.log("URL: " + $(this).attr("url")); //Disable the button - $("button", this).attr("disabled","disabled"); + $(this).attr("disabled","disabled"); + $('#cx_processing').show(); //Call the function to install LTI based on the paramters in the HTML Buttons - installLTI($(this).text(), $("button", this).attr('key'), $("button", this).attr('secret'), $("button", this).attr('url')); + installLTI($(this).text(), $(this).attr('key'), $(this).attr('secret'), $(this).attr('url'), "", $(this)); }); //Outcomes Install @@ -1050,8 +1054,8 @@ function myJQueryCode() { } } - //Install LTIs that use URL Install - function installLTI(name,consumer_key,shared_secret,config_url,canvas_lti_url){ + // Install LTIs that use URL Install + function installLTI(name, consumer_key, shared_secret, config_url, canvas_lti_url, button_trigger) { var data = null; var xhr = new XMLHttpRequest(); @@ -1061,16 +1065,6 @@ function myJQueryCode() { canvas_lti_url = ""; } - xhr.addEventListener("readystatechange", function () { - if (this.readyState === 4) { - console.log(this.responseText); - alert(this.responseText); - if(name === "Canvas Commons"){ - window.open("/accounts/self/settings/configurations#tab-tools", "_blank"); - } - } - }); - //Build the API Call var apiURL = canvas_lti_url + "/api/v1/accounts/self/external_tools?name="; apiURL += encodeURI(name) + "&privacy_level=public&consumer_key="; @@ -1083,6 +1077,21 @@ function myJQueryCode() { xhr.setRequestHeader("Cache-Control", "no-cache"); xhr.send(data); + + xhr.onload = function() { + if ( xhr.status != 200 ) { + alert(`${xhr.status}: ${xhr.statusText}`); + } + $(button_trigger).removeAttr("disabled"); + $('#cx_processing').hide(); + + // LTI specific code can go here if required + + // If the LTI is Canvas Commons, there is one more step so present the link to head on over and complete that step + if ( name.match('Canvas Commons') != null ) { + $(button_trigger).parent().append(' LTI installed. Now complete configuration via root account settings/apps area'); + } + }; } //Import Outcomes Function From 9b5fa29343a7b903ce8adc1d841427a154dc5b93 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Mon, 2 Oct 2023 10:41:25 +1100 Subject: [PATCH 66/91] Google LTI - legacy comment --- canvasBetter.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index cb97077..0ce1fef 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023082401 +// @version 2023100201 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -41,7 +41,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023082401'; + var _cx_tools_version = '2023100201'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -453,7 +453,7 @@ function myJQueryCode() {
    • -
    • +
    • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • Singapore @@ -462,7 +462,7 @@ function myJQueryCode() {
  • -
  • +
  • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • EUROPE (Dublin) @@ -470,7 +470,7 @@ function myJQueryCode() {
  • -
  • +
  • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • EUROPE (Frankfurt) @@ -479,7 +479,7 @@ function myJQueryCode() {
  • -
  • +
  • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • From 470705cb30a3e63b3bd57d03ff3f6c2a8e4fe743 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Fri, 6 Oct 2023 14:23:08 +1100 Subject: [PATCH 67/91] Adding feature description link --- canvasBetter.js | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 0ce1fef..81ba644 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023100201 +// @version 2023100601 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -41,7 +41,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023100201'; + var _cx_tools_version = '2023100601'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -245,6 +245,12 @@ function myJQueryCode() { $('nav ul#section-tabs > li > a:contains(Domain Lookups)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour); $('nav ul#section-tabs > li > a:contains(SFTP User)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour); + + // reference to the Canvas Feature Option Summary + waitForKeyElements("#tab-features > div > span", append_feature_details); + // 20231006 - can't get the correct trigger for this to work correctly + // waitForKeyElements('#tab-features > div > table > tbody', append_feature_account_details); + // END - adding SiteAdmin user shield @@ -1640,4 +1646,19 @@ function fix_permission_header() { }); } +function append_feature_details(node) { + const admin_shield_svg = ''; + + node.append('
    ' + admin_shield_svg + ' Canvas Feature Option Summary
    '); +} + +// 20231006 - can't get this to fire at the correct time - really needs to be supplied by the underling code +/* +function append_feature_account_details(node) { + // attempting to append a feature + $('#tab-features > div > table > tbody > tr > td > div > button > span > span:contains("Account and Course Level Outcome Mastery Scales")').closest('div').find('div > div > div').append('
    feature definition'); + alert('in append_feature_account_details()') +} +*/ + // vim:expandtab ts=4 sw=4 From bca1e72e629d6e5c710fa6a4be326b3ec1db40e1 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Mon, 16 Oct 2023 10:40:09 +1100 Subject: [PATCH 68/91] cleaning up buttons --- canvasBetter.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 81ba644..e94e16b 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023100601 +// @version 2023101601 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -41,7 +41,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023100601'; + var _cx_tools_version = '2023101601'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -459,7 +459,7 @@ function myJQueryCode() {
  • -
  • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • +
  • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • Singapore @@ -468,7 +468,7 @@ function myJQueryCode() {
  • -
  • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • +
  • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • EUROPE (Dublin) @@ -476,7 +476,7 @@ function myJQueryCode() {
  • -
  • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • +
  • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • EUROPE (Frankfurt) @@ -485,7 +485,7 @@ function myJQueryCode() {
  • -
  • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • +
  • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • @@ -519,7 +519,7 @@ function myJQueryCode() { }); //Outcomes Install - $('li.cx_action_outcome').click(function(e){ + $('li.cx_action_outcome button').click(function(e){ e.preventDefault(); console.log('Installing outcomes: ' + $(this).text()); //Disable the button @@ -528,7 +528,7 @@ function myJQueryCode() { }); //External tool link (Office365 / GAFE) - $('li.cx_action_externalTool').click(function(e){ + $('li.cx_action_externalTool button').click(function(e){ e.preventDefault(); $("button", this).attr("disabled","disabled"); From 10c8c866eab0cb3d6b782abe586ff94780f27978 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Fri, 20 Oct 2023 17:07:33 +1100 Subject: [PATCH 69/91] adding "Google Assignments" LTI This is a generic install - i.e. not region specific, from the inherited developer LTI keys --- canvasBetter.js | 99 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 96 insertions(+), 3 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index e94e16b..15a60d6 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023101601 +// @version 2023102001 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -41,7 +41,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023101601'; + var _cx_tools_version = '2023102001'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -451,8 +451,11 @@ function myJQueryCode() {

    Tools

      +
    • Generic +
        +
      • +
    • Sydney -
      • @@ -512,6 +515,8 @@ function myJQueryCode() { //Disable the button $(this).attr("disabled","disabled"); + + // show the user something is happening $('#cx_processing').show(); //Call the function to install LTI based on the paramters in the HTML Buttons @@ -537,6 +542,20 @@ function myJQueryCode() { //window.open("/accounts/self/settings/configurations#tab-tools", "_blank"); //Config Page - Not needed in 2.1 }); + // Inherited LTI developer key + $('li.cx_enable_inherited_lti button').click(function(e){ + e.preventDefault(); + + // disable the button + $(this).attr("disabled","disabled"); + + // show the user something is happening + $('#cx_processing').show(); + + // proposed function + enableLTIKeyandInstallLTI($(this).attr('client_id'), $(this)); + }); + //Update Token function $('#cx_apiTokenButton').click(function(e) { e.preventDefault(); @@ -1100,6 +1119,80 @@ function myJQueryCode() { }; } + // enable an inherited LTI developer key + function enableLTIKeyandInstallLTI(client_id, button_trigger) { + // relative to the domain of the Canvas instance being browsed + var apiURL = '/api/v1/accounts/self/developer_keys/' + client_id + '/developer_key_account_bindings'; + // JSON body + var payload = JSON.stringify({developer_key_account_binding:{workflow_state:'on'}}); + + // debugging + // alert('enableLTIKey(): apiURL == ' + apiURL); + // alert('enableLTIKey(): payload == ' + payload); + + $.ajax({ + type: "POST", + url: apiURL, + headers: { + "Authorization": "Bearer " + userToken, + "Cache-Control": "no-cache", + }, + data: payload, + contentType: "application/json; charset=utf-8", + dataType: "json", + success: function(response) { + console.log('successfully enabled developer LTI key: ' + client_id); + parsed_response = $.parseJSON(JSON.stringify(response)); + console.log('developer LTI key: ' + parsed_response.workflow_state); + // debugging + // alert('at this point make a HTTP POST request to install the app/LTI'); + installLTIviaClientID(client_id, button_trigger); + }, + error: function(e) { + console.log(e); + console.log(JSON.parse(e.responseText)); + json_msg = $.parseJSON(e.responseText); + var err_msg = json_msg['errors']['base']; + console.log('Unable to enable developer LTI key: ' + err_msg); + } + }); + } + + // install LTI via client_id + function installLTIviaClientID(client_id, button_trigger) { + // relative to the domain of the Canvas instance being browsed + var apiURL = '/api/v1/accounts/1/external_tools/'; + + // debugging + // alert('installLTIviaClientID(): client_id == ' + client_id); + + $.ajax({ + type: "POST", + url: apiURL + '?' + $.param({client_id: client_id}), + headers: { + "Authorization": "Bearer " + userToken, + "Cache-Control": "no-cache", + }, + success: function(response) { + console.log('successfully installed external tool (aka LTI)'); + parsed_response = $.parseJSON(JSON.stringify(response)); + console.log('name of installed LTI: ' + parsed_response.name); + + $(button_trigger).removeAttr("disabled"); + $('#cx_processing').hide(); + + $(button_trigger).parent().append(' LTI installed'); + }, + error: function(e) { + console.log(e); + console.log(JSON.parse(e.responseText)); + json_msg = $.parseJSON(e.responseText); + var err_msg = json_msg['errors']['base']; + console.log('Unable to install external tool: ' + err_msg); + } + }); + } + //Import Outcomes Function function outcomesAPI(guid){ var data = null; From 50160da94ce7f4e51957c80f445bf5ea53f8aa51 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Thu, 26 Oct 2023 15:26:52 +1100 Subject: [PATCH 70/91] Adding links for Catalog and New Quizzes setup --- canvasBetter.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 15a60d6..4f5d6c0 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023102001 +// @version 2023102601 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -41,7 +41,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023102001'; + var _cx_tools_version = '2023102601'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -443,6 +443,8 @@ function myJQueryCode() {
      • Create Sandboxes
      • Trust Account
      • SCORM Setup
      • +
      • Catalog Setup
      • +
      • New Quizzes Setup
      • LTI Tool Config Settings Page
      • Canvas Studio GUID
      • Plugins for this instance
      • From cc16ae6db284dc708ae595f4a823d721f9896d13 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Thu, 26 Oct 2023 18:21:24 +1100 Subject: [PATCH 71/91] adding several enable developer keys Microsoft Teams classes Microsoft Teams meetings Microsoft OneDrive Canvas Credentials AU and EU/Ireland --- canvasBetter.js | 85 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 75 insertions(+), 10 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 4f5d6c0..339f1b1 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -445,6 +445,7 @@ function myJQueryCode() {
      • SCORM Setup
      • Catalog Setup
      • New Quizzes Setup
      • +
      • Microsoft OneDrive install documentation
      • LTI Tool Config Settings Page
      • Canvas Studio GUID
      • Plugins for this instance
      • @@ -455,7 +456,9 @@ function myJQueryCode() {
        • Generic
            -
          • +
          • +
          • (once you have clicked this button and the developer key has been enabled, you will need to refer to Microsoft documentation step 5 onwards)
          • +
          • (once you have clicked this button and the developer key has been enabled, you will need to refer to Microsoft documentation - note: this may have been done already if Microsoft Teams classes has been already configured)
        • Sydney
            @@ -465,6 +468,7 @@ function myJQueryCode() {
          • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
          • +
          • (this will enable the API key and regional LTI key)
        • Singapore @@ -482,6 +486,7 @@ function myJQueryCode() {
        • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
        • +
        • (this will enable the API key and regional LTI key)
      • EUROPE (Frankfurt) @@ -545,17 +550,51 @@ function myJQueryCode() { }); // Inherited LTI developer key - $('li.cx_enable_inherited_lti button').click(function(e){ + $('li.cx_enable_inherited_lti_and_app button').click(function(e){ e.preventDefault(); + // need to get the specific button + var id = $(this).prop('id'); // disable the button - $(this).attr("disabled","disabled"); + $('#'+id).attr("disabled","disabled"); + + // show the user something is happening + $('#cx_processing').show(); + + // proposed function + enableLTIKeyandInstallLTI($(this).attr('client_id'), $('#'+id)); + }); + + $('li.cx_enable_inherited_lti_only button').click(function(e){ + e.preventDefault(); + + // need to get the specific button + var id = $(this).prop('id'); + // disable the button + $('#'+id).attr("disabled","disabled"); // show the user something is happening $('#cx_processing').show(); // proposed function - enableLTIKeyandInstallLTI($(this).attr('client_id'), $(this)); + enableLTIKeyandInstallLTI($(this).attr('client_id'), $('#'+id), false); + }); + + $('li.cx_enable_credentials button').click(function(e){ + e.preventDefault(); + + // need to get the specific button + var id = $(this).prop('id'); + + // disable the button + $('#'+id).attr("disabled","disabled"); + + // show the user something is happening + $('#cx_processing').show(); + + // proposed function + enableLTIKeyandInstallLTI($(this).attr('client_id_api'), $('#'+id), false, handle_credentials_api_key_enable); + enableLTIKeyandInstallLTI($(this).attr('client_id_lti'), $('#'+id), false, handle_credentials_lti_key_enable); }); //Update Token function @@ -914,7 +953,7 @@ function myJQueryCode() { $.ajax(settings).done(function (response) { console.log(response); - apiReply = JSON.parse(response); + var apiReply = JSON.parse(response); if(apiReply.length > 0){ $.each(apiReply,function(index,element){ console.log(element); @@ -1122,7 +1161,8 @@ function myJQueryCode() { } // enable an inherited LTI developer key - function enableLTIKeyandInstallLTI(client_id, button_trigger) { + // Note: this will install the LTI, unless install_lti == false + function enableLTIKeyandInstallLTI(client_id, button_trigger, install_lti = true, s_func = null) { // relative to the domain of the Canvas instance being browsed var apiURL = '/api/v1/accounts/self/developer_keys/' + client_id + '/developer_key_account_bindings'; // JSON body @@ -1146,9 +1186,21 @@ function myJQueryCode() { console.log('successfully enabled developer LTI key: ' + client_id); parsed_response = $.parseJSON(JSON.stringify(response)); console.log('developer LTI key: ' + parsed_response.workflow_state); - // debugging - // alert('at this point make a HTTP POST request to install the app/LTI'); - installLTIviaClientID(client_id, button_trigger); + if ( install_lti == true ) { + // debugging + // alert('at this point make a HTTP POST request to install the app/LTI'); + installLTIviaClientID(client_id, button_trigger); + } else { + $(button_trigger).removeAttr("disabled"); + $('#cx_processing').hide(); + + $(button_trigger).parent().append(' developer key (' + client_id + ') enabled'); + + // call additional "success function" if one supplied + if ( s_func != null ) { + s_func(button_trigger); + } + } }, error: function(e) { console.log(e); @@ -1183,7 +1235,7 @@ function myJQueryCode() { $(button_trigger).removeAttr("disabled"); $('#cx_processing').hide(); - $(button_trigger).parent().append(' LTI installed'); + $(button_trigger).parent().append(' LTI "' + parsed_response.name + '" installed'); }, error: function(e) { console.log(e); @@ -1195,6 +1247,19 @@ function myJQueryCode() { }); } + // Note: this are very specific to the Credentials button + function handle_credentials_api_key_enable(button_trigger) { + var lti_span; + lti_span=$(button_trigger).parent().find("span:nth-of-type(1)").css('padding', '0.25rem').css('background-color','lightgreen').css('color', 'white'); + $(lti_span).find("input").prop('checked', true); + } + // Note: this are very specific to the Credentials button + function handle_credentials_lti_key_enable(button_trigger) { + var lti_span; + lti_span=$(button_trigger).parent().find("span:nth-of-type(2)").css('padding', '0.25rem').css('background-color','lightgreen').css('color', 'white'); + $(lti_span).find("input").prop('checked', true); + } + //Import Outcomes Function function outcomesAPI(guid){ var data = null; From d81a855dc95945509de0fec2188a66f4cd6beb23 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Tue, 31 Oct 2023 12:24:57 +1100 Subject: [PATCH 72/91] Excluding gerrit --- canvasBetter.js | 1 + 1 file changed, 1 insertion(+) diff --git a/canvasBetter.js b/canvasBetter.js index 339f1b1..981f323 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -13,6 +13,7 @@ // @match https://instructure.my.salesforce.com/* // @exclude https://siteadmin*instructure.com/* // @exclude https://reports.instructure.com/* +// @exclude https://gerrit.instructure.com/* // @grant GM_getValue // @grant GM_setValue // @grant GM_getResourceText From 60c1ee3b533e29db553492fc19c51f31bfa65f77 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Tue, 31 Oct 2023 16:49:06 +1100 Subject: [PATCH 73/91] Excluding identity --- canvasBetter.js | 1 + 1 file changed, 1 insertion(+) diff --git a/canvasBetter.js b/canvasBetter.js index 981f323..f47038a 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -14,6 +14,7 @@ // @exclude https://siteadmin*instructure.com/* // @exclude https://reports.instructure.com/* // @exclude https://gerrit.instructure.com/* +// @exclude https://identity.instructure.com/* // @grant GM_getValue // @grant GM_setValue // @grant GM_getResourceText From af03c89ff3cc4d46c86eb546060bca2df3c2dcf9 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Thu, 16 Nov 2023 22:37:26 +1100 Subject: [PATCH 74/91] Adding Commons for CA and US ca-central-1 and us-east-1 --- canvasBetter.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index f47038a..e53bd24 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023102601 +// @version 2023111601 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -43,7 +43,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023102601'; + var _cx_tools_version = '2023111601'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -462,7 +462,7 @@ function myJQueryCode() {
      • (once you have clicked this button and the developer key has been enabled, you will need to refer to Microsoft documentation step 5 onwards)
      • (once you have clicked this button and the developer key has been enabled, you will need to refer to Microsoft documentation - note: this may have been done already if Microsoft Teams classes has been already configured)
      -
    • Sydney +
    • APAC - Sydney
      • @@ -473,7 +473,7 @@ function myJQueryCode() {
      • (this will enable the API key and regional LTI key)
    • -
    • Singapore +
    • APAC - Singapore
      • @@ -482,7 +482,7 @@ function myJQueryCode() {
      • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
    • -
    • EUROPE (Dublin) +
    • EMEA - Dublin
      • @@ -491,7 +491,7 @@ function myJQueryCode() {
      • (this will enable the API key and regional LTI key)
    • -
    • EUROPE (Frankfurt) +
    • EMEA - Frankfurt
      • @@ -500,6 +500,16 @@ function myJQueryCode() {
      • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
    • +
    • NORAM - Canada +
        +
      • +
      +
    • +
    • NORAM - USA +
        +
      • +
      +

    From 5c26b85e134bfe7254fd3fda276cbf8d4daab8d4 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Thu, 21 Dec 2023 12:33:19 +1100 Subject: [PATCH 75/91] Added in link to check SSL/TLS certificate --- canvasBetter.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index e53bd24..49ab574 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023111601 +// @version 2023122101 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -43,7 +43,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023111601'; + var _cx_tools_version = '2023122101'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -452,6 +452,7 @@ function myJQueryCode() {
  • Canvas Studio GUID
  • Plugins for this instance
  • Error Reports for this instance
  • +
  • SSL/TLS check of the certificate for this instance
  • Tools

    @@ -521,7 +522,8 @@ function myJQueryCode() {
    `.trim(); - var _main_menu_html = _main_menu_html_tpl.replaceAll("_VERSION_", _cx_tools_version).replaceAll('_userToken_', userToken); + + var _main_menu_html = _main_menu_html_tpl.replaceAll("_VERSION_", _cx_tools_version).replaceAll('_userToken_', userToken).replaceAll("_INSTANCE_URL_", document.location.hostname); $('#main').html(_main_menu_html); // LTI Buttons Function From 6979253358393f8b99c5a70f42e03d9c1e9bbf7e Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Wed, 21 Feb 2024 12:52:48 +1100 Subject: [PATCH 76/91] added Studio config URL Simplifying the process (a little) to install Canvas Studio --- canvasBetter.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 49ab574..def57ca 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2023122101 +// @version 2024022101 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -43,7 +43,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2023122101'; + var _cx_tools_version = '2024022101'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -449,7 +449,11 @@ function myJQueryCode() {
  • New Quizzes Setup
  • Microsoft OneDrive install documentation
  • LTI Tool Config Settings Page
  • -
  • Canvas Studio GUID
  • +
  • Canvas Studio GUID +
      +
    • Canvas Studio config URL (you can right click this to "Copy Link Address" and then paste into the LTI install process) +
    +
  • Plugins for this instance
  • Error Reports for this instance
  • SSL/TLS check of the certificate for this instance
  • @@ -523,7 +527,8 @@ function myJQueryCode() { `.trim(); - var _main_menu_html = _main_menu_html_tpl.replaceAll("_VERSION_", _cx_tools_version).replaceAll('_userToken_', userToken).replaceAll("_INSTANCE_URL_", document.location.hostname); + var _subdomain = document.location.hostname.split('.')[0]; + var _main_menu_html = _main_menu_html_tpl.replaceAll("_VERSION_", _cx_tools_version).replaceAll('_userToken_', userToken).replaceAll('_INSTANCE_URL_', document.location.hostname).replaceAll('_INSTANCE_SUBDOMAIN_', _subdomain); $('#main').html(_main_menu_html); // LTI Buttons Function From bcdd5fd1249d95b85517086d74d3873681c170fc Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Fri, 8 Mar 2024 16:47:51 +1100 Subject: [PATCH 77/91] attempting to provide better UI --- assets/check-mark-512x512.png | Bin 0 -> 9354 bytes assets/check-mark-64x64.png | Bin 0 -> 952 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100755 assets/check-mark-512x512.png create mode 100755 assets/check-mark-64x64.png diff --git a/assets/check-mark-512x512.png b/assets/check-mark-512x512.png new file mode 100755 index 0000000000000000000000000000000000000000..8bfe07cbaed00ea6fc2c0c62777193196aaec222 GIT binary patch literal 9354 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 LNrQ5I;?@5H+dEXV literal 0 HcmV?d00001 diff --git a/assets/check-mark-64x64.png b/assets/check-mark-64x64.png new file mode 100755 index 0000000000000000000000000000000000000000..a89e525acae7b1d64cb933bcf6fddf97ae62bddd GIT binary patch literal 952 zcmV;p14sOcP)Mu=l&FOf8}Sj* zM$?E93rS%i0Sk?th=mahAzidE8d3-rY7rEI2sS<Wk_hLoqASJjOf1tvLg|lR5HGUA}EBuSe zqKPtcCO&aWzQW5z6J_KKyl1Zb&p5kes9bcg(_Hxq4;0LlmFIQKzf&|(MjqEK{}(PT z87dcdMW1o8Y3Xhcvn34(X(Ja5u zh~D$JYL-8N>q-So$!5*+mGI^#ITOMxuNPi8q+VkQv6-hML-ty>*)wPzF{ZfYut=G#jh<# zu_m=>9m|EQIP4@0T2G}{Z02GdlwbaHi|9~ut^OZU+Ni1jdoC&-k#7RF=TVC173t*< z;+$MUv79b$?>&t?GZguuwf(BxypP(7*i1 z9%}B;EdP)2H Date: Fri, 8 Mar 2024 16:56:23 +1100 Subject: [PATCH 78/91] better user feedback added tick (or check mark) to show the user which buttons have been pressed. added Credentials for SG, CA and US other minor text tweaks --- canvasBetter.js | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index def57ca..719f1b1 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2024022101 +// @version 2024030801 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -43,7 +43,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2024022101'; + var _cx_tools_version = '2024030801'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -475,7 +475,7 @@ function myJQueryCode() {
  • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • -
  • (this will enable the API key and regional LTI key)
  • +
  • (this will enable the API key and regional LTI key - you will still need to install the LTI at the appropriate sub-account)
  • APAC - Singapore @@ -485,6 +485,7 @@ function myJQueryCode() {
  • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • +
  • (this will enable the API key and regional LTI key - you will still need to install the LTI at the appropriate sub-account)
  • EMEA - Dublin @@ -493,7 +494,7 @@ function myJQueryCode() {
  • (legacy - best to use the "Google Assignments LTI 1.3" - inherited developer key)
  • -
  • (this will enable the API key and regional LTI key)
  • +
  • (this will enable the API key and regional LTI key - you will still need to install the LTI at the appropriate sub-account)
  • EMEA - Frankfurt @@ -508,14 +509,22 @@ function myJQueryCode() {
  • NORAM - Canada
    • +
    • (this will enable the API key and regional LTI key - you will still need to install the LTI at the appropriate sub-account)
  • NORAM - USA
    • +
    • (this will enable the API key and regional LTI key - you will still need to install the LTI at the appropriate sub-account)
  • +
    +

    Acknowledgements:

    + +

    @@ -1170,11 +1179,14 @@ function myJQueryCode() { $(button_trigger).removeAttr("disabled"); $('#cx_processing').hide(); + // Show the user something + $(button_trigger).parent().append(' LTI installed '); + // LTI specific code can go here if required // If the LTI is Canvas Commons, there is one more step so present the link to head on over and complete that step if ( name.match('Canvas Commons') != null ) { - $(button_trigger).parent().append(' LTI installed. Now complete configuration via root account settings/apps area'); + $(button_trigger).parent().append(' — now complete configuration via root account settings/apps area'); } }; } From ce79701ee341e92125747c90632b831b6ebebcdf Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Fri, 8 Mar 2024 17:15:58 +1100 Subject: [PATCH 79/91] minor comment changes --- canvasBetter.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 719f1b1..00b4b17 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -783,7 +783,7 @@ function myJQueryCode() { document.title="CX Tools - Create Trust"; $('#main').html('

    Trust Account









    Console Log

    Useful links;


    '); - //When the user clicks "Create trust" + // When the user clicks "Create trust" $('#cx_createTrust').click(function(e){ e.preventDefault(); updateConsoleLog('Start creating trust...'); @@ -1503,13 +1503,13 @@ function myJQueryCode() { } - //Create trust function + // Create trust function function createTrust(targetID,shardID){ - //build Post URL - //Example post: "https://apaccs.instructure.com/api/v1/accounts/13677~1/trust_links?trust_link%5Bmanaging_account_id%5D=16292~1" + // build Post URL + // Example post: "https://apaccs.instructure.com/api/v1/accounts/13677~1/trust_links?trust_link%5Bmanaging_account_id%5D=16292~1" var buildPost = "/api/v1/accounts/"; - //add this accounts ID + // add this accounts ID buildPost += ENV.DOMAIN_ROOT_ACCOUNT_ID; buildPost += "/trust_links"; From f52f152b1d1e08be06cde9ce4bcda0996248e756 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Fri, 8 Mar 2024 17:19:44 +1100 Subject: [PATCH 80/91] testing github branch rules --- canvasBetter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/canvasBetter.js b/canvasBetter.js index 00b4b17..64eb4c8 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -38,7 +38,7 @@ if (typeof jQuery == 'undefined' || typeof jQuery === undefined || typeof jQuery } function myJQueryCode() { - //global variables + // global variables var domain = 'https://' + document.location.hostname; var userToken = getItem('token'); var token = userToken; From e64e012a965a6610fec477d326d4dd4a55bfa835 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Wed, 20 Mar 2024 14:18:40 +1100 Subject: [PATCH 81/91] added link for GraphQL playgound --- canvasBetter.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 64eb4c8..7cb8c01 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2024030801 +// @version 2024032001 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -43,7 +43,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2024030801'; + var _cx_tools_version = '2024032001'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -456,6 +456,7 @@ function myJQueryCode() {
  • Plugins for this instance
  • Error Reports for this instance
  • +
  • GraphiQL playground (i.e. GraphQL playground) for this Canvas instance
  • SSL/TLS check of the certificate for this instance
  • Tools

    From 60a28f9047d72ffc0a06c5c36ce924d7ea870f40 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Fri, 12 Apr 2024 14:10:22 +1000 Subject: [PATCH 82/91] screen shot of a SiteAdmin only visible setting When there are settings only visible to Canvas SiteAdmins, they are highlighted like this --- assets/siteadmin-highted-setting-example.png | Bin 0 -> 19103 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/siteadmin-highted-setting-example.png diff --git a/assets/siteadmin-highted-setting-example.png b/assets/siteadmin-highted-setting-example.png new file mode 100644 index 0000000000000000000000000000000000000000..761ee36b90b8f52b1a9225aae289c10dcf3efc65 GIT binary patch literal 19103 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 Tf^ Date: Fri, 12 Apr 2024 14:17:12 +1000 Subject: [PATCH 83/91] Update README.md Adding in screenshot of highlighted settings --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 4b7e22d..37a4900 100644 --- a/README.md +++ b/README.md @@ -10,3 +10,11 @@ In a browser add on like GreaseMonkey (FireFox) or TamperMonkey (Chrome) you can The URL to install from is: https://raw.githubusercontent.com/clmcavaney/CX-Tools/master/canvasBetter.js + +That URL points to a cached copy of the script. The cached copy should update soon after any pushed change. + +## Notes +When a setting is only visible to a SiteAdmin, it is highlighted like this: +![SiteAdmin highlighting example](assets/siteadmin-highted-setting-example.png) + +Note that there is also reference to some internal documentation on what this setting is for. From 572ca99076a508fb93a231e43561af49f9323af7 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Fri, 12 Apr 2024 14:18:18 +1000 Subject: [PATCH 84/91] Rename siteadmin-highted-setting-example.png to siteadmin-highlighted-setting-example.png Spelling mistake in file name --- ...ng => siteadmin-highlighted-setting-example.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename assets/{siteadmin-highted-setting-example.png => siteadmin-highlighted-setting-example.png} (100%) diff --git a/assets/siteadmin-highted-setting-example.png b/assets/siteadmin-highlighted-setting-example.png similarity index 100% rename from assets/siteadmin-highted-setting-example.png rename to assets/siteadmin-highlighted-setting-example.png From c5507f55504a31e55f267c070595c3d7fa4d2781 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Fri, 12 Apr 2024 14:19:05 +1000 Subject: [PATCH 85/91] Update README.md Updated reference to asset file name change --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 37a4900..05428c7 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,6 @@ That URL points to a cached copy of the script. The cached copy should update s ## Notes When a setting is only visible to a SiteAdmin, it is highlighted like this: -![SiteAdmin highlighting example](assets/siteadmin-highted-setting-example.png) +![SiteAdmin highlighting example](assets/siteadmin-highlighted-setting-example.png) Note that there is also reference to some internal documentation on what this setting is for. From 864bc595b7a40985cc898114ecf7b104fc76f3f3 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Mon, 27 May 2024 15:46:47 +1000 Subject: [PATCH 86/91] adding Lucid Integration --- canvasBetter.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 7cb8c01..66c8540 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2024032001 +// @version 2024052701 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -43,7 +43,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2024032001'; + var _cx_tools_version = '2024052701'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -467,6 +467,7 @@ function myJQueryCode() {
  • (once you have clicked this button and the developer key has been enabled, you will need to refer to Microsoft documentation step 5 onwards)
  • (once you have clicked this button and the developer key has been enabled, you will need to refer to Microsoft documentation - note: this may have been done already if Microsoft Teams classes has been already configured)
  • +
  • APAC - Sydney
      From 4867108359226d2d9dc0e5abacda0ef8be6f05b2 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Mon, 27 May 2024 16:52:28 +1000 Subject: [PATCH 87/91] minor Ludic modification to provide greater flexibility in enabling and/or installing the Lucid app --- canvasBetter.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 66c8540..5216b72 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2024052701 +// @version 2024052702 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -43,7 +43,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2024052701'; + var _cx_tools_version = '2024052702'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -467,7 +467,8 @@ function myJQueryCode() {
    • (once you have clicked this button and the developer key has been enabled, you will need to refer to Microsoft documentation step 5 onwards)
    • (once you have clicked this button and the developer key has been enabled, you will need to refer to Microsoft documentation - note: this may have been done already if Microsoft Teams classes has been already configured)
    • -
    • +
    • +
  • APAC - Sydney
      From dcca4ba5d825ed4f6918d6fc18f39a2f09a11d77 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Wed, 6 Nov 2024 08:43:28 +1100 Subject: [PATCH 88/91] adding setting definition for Equella --- canvasBetter.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 5216b72..4a65f3f 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2024052702 +// @version 2024110601 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -43,7 +43,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2024052702'; + var _cx_tools_version = '2024110601'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -236,6 +236,7 @@ function myJQueryCode() { $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_show_scheduler]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_profiles]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_limit_parent_app_web_access]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); + $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=enable_equella]').parent().append(''); $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_settings_enable_turnitin]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_services_account_survey_notifications]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); $('#account_settings > fieldset > legend:contains(Features)').parent().find('div > label[for=account_services_beta_for_students]').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour).append(''); From 7a85381d31b10802edb2acae85d0d349b4547bcf Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Thu, 6 Mar 2025 12:43:35 +1100 Subject: [PATCH 89/91] added local notes file --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index e7bcaed..b480f96 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,6 @@ Icon Network Trash Folder Temporary Items .apdisk + +# local repo extras +readme-committing-changes.txt From 1a3f76d05c4b2485f6f23443c8e953c42a9992c7 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Thu, 6 Mar 2025 12:43:58 +1100 Subject: [PATCH 90/91] New authentication_provider setting only visible to site admins --- canvasBetter.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/canvasBetter.js b/canvasBetter.js index 4a65f3f..1d486f6 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2024110601 +// @version 2025030601 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -43,7 +43,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2024110601'; + var _cx_tools_version = '2025030601'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -67,9 +67,12 @@ function myJQueryCode() { const re_users=/accounts\/(\d+|self)\/users/; const re_settings=/\/accounts\/(\d+|self)\/settings/; const re_perms=/\/accounts\/[^\/]+\/permissions/; + const re_auth_providers=/\/accounts\/[^\/]+\/authentication_providers/; const sa_setting_hl_colour='#fdf3f3'; + const admin_shield_svg = ''; + // if on the settings page if ( document.location.pathname.toLowerCase().match(re_settings) !== null ) { @@ -201,7 +204,6 @@ function myJQueryCode() { }); //----------End do the apply default button ----------------------- - const admin_shield_svg = ''; // Adding identifiers to items that only SiteAdmin users can change $('#account_settings tr td > label[for=account_settings_mfa_settings]').parent().prepend(admin_shield_svg); @@ -248,7 +250,6 @@ function myJQueryCode() { $('nav ul#section-tabs > li > a:contains(Domain Lookups)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour); $('nav ul#section-tabs > li > a:contains(SFTP User)').css('align-items', 'center').css('display', 'flex').append(admin_shield_svg).parent().css('background-color', sa_setting_hl_colour); - // reference to the Canvas Feature Option Summary waitForKeyElements("#tab-features > div > span", append_feature_details); // 20231006 - can't get the correct trigger for this to work correctly @@ -387,6 +388,13 @@ function myJQueryCode() { } return; }); + } else if ( document.location.pathname.toLowerCase().match(re_auth_providers) !== null ) { + _cx_tools_on = true; + + // new common identity box on the authentication page + // ic-Form-control with a child input tag with name attribute of "authentication_provider[instructure_identity_login_percentage]" + $('#application div.ic-Form-control > input[name="authentication_provider[instructure_identity_login_percentage]"]').parent().append(admin_shield_svg).css('background-color', sa_setting_hl_colour); + } else if (document.location.pathname.toLowerCase() === "/cxtools1") { _cx_tools_on = true; From 591c4ef87b8ce12c6eb09f5881292eea41a8d047 Mon Sep 17 00:00:00 2001 From: Christopher McAvaney Date: Mon, 24 Mar 2025 16:39:59 +1100 Subject: [PATCH 91/91] Adding warning for missing access token --- canvasBetter.css | 14 ++++++++++++++ canvasBetter.js | 11 ++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/canvasBetter.css b/canvasBetter.css index e5a0d79..e631292 100644 --- a/canvasBetter.css +++ b/canvasBetter.css @@ -30,6 +30,20 @@ text-shadow: 1px 1px 1px rgba(0,0,0,0.004); } +.cx-tools-access-token-warning { + position: absolute; + right: 10rem; + top: 0; + z-index: 1000; + background: #f00; + opacity: 0.4; + font-family: ‘Roboto’, sans-serif; + font-size: 12px; + color: #ffff3d; + padding-left: 0.5rem; + padding-right: 0.5rem; +} + #cx_processing { position: fixed; top: 115; diff --git a/canvasBetter.js b/canvasBetter.js index 1d486f6..e1fb1db 100755 --- a/canvasBetter.js +++ b/canvasBetter.js @@ -2,7 +2,7 @@ // @name Canvas Experience (CX) Tools // @namespace https://siteadmin.instructure.com/ // @namespace https://instructure.my.salesforce.com/* -// @version 2025030601 +// @version 2025032402 // @description Trying to take over the world! "Canvas Experience (CX) Tools" // @author Daniel Gilogley, Zoe Bogner and Christopher McAvaney // @match https://*.test.instructure.com/* @@ -43,7 +43,7 @@ function myJQueryCode() { var userToken = getItem('token'); var token = userToken; var _cx_tools_on = false; - var _cx_tools_version = '2025030601'; + var _cx_tools_version = '2025032402'; // If on an instructure page if (document.location.hostname.indexOf('instructure.com') >= 0) { @@ -891,6 +891,11 @@ function myJQueryCode() { $('body').prepend('
      CX Tools ON
      '); } + // Display a warning so that users know to configure their access token + if (token === null || (typeof token === "string" && token.length === 0)) { + $('body').prepend('
      NO ACCESS TOKEN CONFIGURED
      '); + } + }); // ELSE if on the IC request page } else if (document.location.hostname === "s3.amazonaws.com") { @@ -997,7 +1002,7 @@ function myJQueryCode() { if(apiReply.length > 0){ $.each(apiReply,function(index,element){ console.log(element); - $("td.external_tool.e-tool-table-data[title='"+ element.name + "']").append(' - LTI ID #' + element.id); + $("td.external_tool.e-tool-table-data[title='"+ element.name.replace(/[']/g, '\\$&') + "']").append(' - LTI ID #' + element.id); }); //add the hide button too