added data_update.html

This commit is contained in:
2026-02-13 09:13:55 -05:00
parent 9437757bf8
commit 6a20f6f7db
22 changed files with 12758 additions and 0 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,266 @@
bates_analytics = window.bates_analytics || {};
if( typeof bates_analytics.getCookies === 'undefined' ) {
bates_analytics.getCookies = function() {
var c = document.cookie.split(';');
var out = {};
if( c.length < 1 )
return out;
c.forEach( pair => {
pair = pair.trim();
pair = pair.split('=')
let val = (pair.length > 1) ? pair[1] : true;
out[ pair[0] ] = val;
})
return out;
};
}
const matchesUrlParam = function( keysToCheck ) {
if( window.location.search == '' )
return false;
var queryParams = new URLSearchParams(window.location.search);
for( let paramKey in keysToCheck ) {
// if one of our specified query params is present in the url
if( queryParams.has( paramKey ) ) {
// if we've specified true for the param value match just existance,
// otherwise, see if our specified value matches the value in the url
if (
keysToCheck[paramKey] === true
||
keysToCheck[paramKey] == queryParams.get( paramKey )
) {
// if our query param matches
return true
}
}
}
return false;
};
const shouldWeTag = function(){
/**
* To track a domain, set the domain (optionally include the subdomain) as the object key name,
*
* To track the whole domain/subdomain, set the value to 1
*
* To only track part of a domain, set the value to an object with the following entries:
*
* @key default [int] 1 or 0, whether to track this domain in general (if no exceptions match)
* @key exceptions [array]: an array of exception objects: each objects must have an allow key, and
* at least a "path" or "params" key, but it can have both. If you provide
* both, both must match for the "allow" value to be used.
* @key allow [int] 1 or 0, whether to track this matched path/url
* @key path [string] A path to match against
* @key params [object] Key/value pairs to match against url parameters. If you just
* want to match the key, set the value to true
*/
const hostMap = {
"abacus.bates.edu": {
"exceptions": [
{
path: '/oralhistory/',
allow: 1,
}
],
},
"adminlb.imodules.com":1,
"archives.bates.edu": {
"default": 0,
"exceptions": [
{
path: '/photos/',
allow: 1,
}
],
},
// keeping the various catalog urls together
"catalog.bates.edu":1,
"catalog-archive.bates.edu":1,
"batescollege.coursedog.com":1,
"batescatalogpreview.coursedog.com":1,
"bates-catalog.coursedog.com":1,
"apply.bates.edu": {
"default": 1,
"exceptions": [
{
path: "/account/login",
params: {
e: true,
},
allow: 0,
},
],
},
"bates-archives.libraryhost.com":1,
"bates-college-store.myshopify.com":1,
"bates.beta.libguides.com":1,
// "bates.loc":1, // local testing environment
"batescollege.tumblr.com":1,
"batesnews.tumblr.com":1,
"batesorientation2014.sched.org":1,
"batesshortterm.tumblr.com":1,
"bco-dev.bates.edu":1,
"bco-jparis.bates.edu":1,
"bco-kblake.bates.edu":1,
"bco-nobrien.bates.edu":1,
"bco-remodel.bates.edu":1,
"bco-test.bates.edu":1,
"coursedog.com":1,
"community.bates.edu":1,
"dexter.bates.edu":1,
"digilib.bates.edu":1,
"diversebookfinder.org":1,
"cat.diversebookfinder.org":1,
"emergency.bates.edu":1,
"events.bates.edu":1,
"events-test.bates.edu":1,
"gg-bprod.bates.edu":1,
"giftplanning.bates.edu": 1,
"illiad.bates.edu":1,
"libanswers.bates.edu":1,
"libguides.bates.edu":1,
"lyceum-beta.bates.edu":1,
"lyceum.bates.edu":1,
"marchmania.org":1,
"menu.bates.edu":1,
"museum.bates.edu":1,
"museum-dev.bates.edu":1,
"new.livestream.com":1,
"picturestories.bates.edu":1,
"quad.bates.edu":1,
"quad-dev.bates.edu":1,
"quad-sa.bates.edu":1,
"quad-test.bates.edu":1,
"securelb.imodules.com":1,
"store.bates.edu":1,
"www-stage.bates.edu":1,
"www.bates.edu":1,
"www.batesdancefestival.org":1,
"www.garnetgateway.com":1,
"gobatesbobcats.com":1,
};
var out = 0,
domain = window.location.host,
path = window.location.pathname.toLowerCase();
if( typeof hostMap[domain] === 'undefined' )
return false;
if( hostMap[domain] === 1 )
return true;
// check for exceptions, and change the default as needed
if( typeof hostMap[domain] === 'object' ){
// set our default if there is one
if( typeof hostMap[domain].default != 'undefined' )
out = hostMap[domain].default ;
if( typeof hostMap[domain].exceptions !== 'undefined' ) {
hostMap[domain].exceptions.forEach( exception => {
// if a path exception exists
if( typeof exception.path !== 'undefined' ) {
// match our path with front of object key
if( exception.path.indexOf( path ) === 0 ) {
// if we've also specified a query param to check by, check that
if( typeof exception.params !== 'undefined' ) {
if( matchesUrlParam( exception.params ) ) {
// if our query param matches, use the "allow" value
out = exception.allow;
}
// if we haven't specified a query param to check by, just use the "allow" value now
} else {
out = exception.allow;
}
}
// if ONLY a params exception exists
} else if( typeof exception.params !== 'undefined' ) {
if( matchesUrlParam( exception.params ) ) {
// if our query param matches, use the "allow" value
out = exception.allow;
}
}
});
}
}
return (out==1);
};
if( shouldWeTag() ) {
// Our own FB conversions api implementation
(function(){
var myself, a, path, thisUrlPath, event_id;
// Get our own uri directory
myself = document.querySelector('script[src*="/analytics.js"');
if( ! myself )
return;
const createEventId = () => Math.floor(Math.random()*999999999999);
a = new URL( myself.src );
if( a.pathname === '/') {
path = '/';
} else {
// path = /analytics/analytics.js?v=1.2.3
path = a.pathname.split('/');
// path = ['', 'analytics', 'analytics.js?v=1.2.3' ]
path.pop();
// path = ['', 'analytics']
path = path.join('/') + '/';
// path = /analytics/
}
thisUrlPath = a.origin + path;
var newParams = new URLSearchParams();
var currentParams = new URLSearchParams( window.location.search )
// create an event_id for deduping js & php event
if( ! bates_analytics.FACEBOOK_ANALYTICS_EVENTS ) {
bates_analytics.FACEBOOK_ANALYTICS_EVENTS = {};
}
const fbEvents = [
'ViewContent',
'Lead',
'CompleteRegistration',
// 'PageView'
];
fbEvents.forEach( eventName => {
if( typeof bates_analytics.FACEBOOK_ANALYTICS_EVENTS[eventName] === 'undefined' )
bates_analytics.FACEBOOK_ANALYTICS_EVENTS[eventName] = createEventId();
// save event_id so the js pixel implementation can use it later
newParams.set(`${eventName}_event_id`, bates_analytics.FACEBOOK_ANALYTICS_EVENTS[eventName] );
});
newParams.set('theurl', window.location);
// Get facebook's meta pixel set cookies
// More details: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc
var cookies = bates_analytics.getCookies();
if( typeof cookies._fbp !== 'undefined' ) {
newParams.set('fbp', cookies._fbp );
}
if( typeof cookies._fbc !== 'undefined' ) {
newParams.set('fbc', cookies._fbc)
} else if ( currentParams.has('fbclid') ) {
newParams.set('fbclid', currentParams.get('fbclid') );
}
const fetchUrl = thisUrlPath + 'fbconv.php?' + newParams.toString();
// for now, don't grab the response
fetch( fetchUrl );
})();
// Tag Manager
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer', "GTM-NS4K3BT" )
}

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-left" preserveAspectRatio="xMinYMid meet"><line x1="19" y1="12" x2="5" y2="12"></line><polyline points="12 19 5 12 12 5"></polyline></svg>

After

Width:  |  Height:  |  Size: 348 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-right" preserveAspectRatio="xMinYMid meet"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>

After

Width:  |  Height:  |  Size: 350 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,5 @@
.yui3-widget-hidden{display:none}.yui3-widget-content{overflow:hidden}.yui3-widget-content-expanded{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;height:100%}.yui3-widget-tmp-forcesize{overflow:hidden!important}#yui3-css-stamp.skin-sam-widget-base{display:none}
.yui3-widget-stacked .yui3-widget-shim{opacity:0;filter:alpha(opacity=0);position:absolute;border:0;top:0;left:0;padding:0;margin:0;z-index:-1;width:100%;height:100%;_width:0;_height:0}#yui3-css-stamp.skin-sam-widget-stack{display:none}
.yui3-overlay{position:absolute}.yui3-overlay-hidden{visibility:hidden}.yui3-widget-tmp-forcesize .yui3-overlay-content{overflow:hidden!important}#yui3-css-stamp.skin-sam-overlay{display:none}
.yui3-skin-sam .yui3-widget-mask{background-color:black;zoom:1;-ms-filter:"alpha(opacity=40)";filter:alpha(opacity=40);opacity:.4}#yui3-css-stamp.skin-sam-widget-modality{display:none}
.yui3-panel{position:absolute}.yui3-panel-hidden{visibility:hidden}.yui3-widget-tmp-forcesize .yui3-panel-content{overflow:hidden!important}.yui3-panel .yui3-widget-hd{position:relative}.yui3-panel .yui3-widget-hd .yui3-widget-buttons{position:absolute;top:0;right:0}.yui3-panel .yui3-widget-ft .yui3-widget-buttons{display:inline-block;*display:inline;zoom:1}.yui3-skin-sam .yui3-panel-content{-webkit-box-shadow:0 0 5px #333;-moz-box-shadow:0 0 5px #333;box-shadow:0 0 5px #333;border:1px solid black;background:white}.yui3-skin-sam .yui3-panel .yui3-widget-hd{padding:8px 28px 8px 8px;min-height:13px;_height:13px;color:white;background-color:#3961c5;background:-moz-linear-gradient(0% 100% 90deg,#2647a0 7%,#3d67ce 50%,#426fd9 100%);background:-webkit-gradient(linear,left bottom,left top,from(#2647a0),color-stop(0.07,#2647a0),color-stop(0.5,#3d67ce),to(#426fd9))}.yui3-skin-sam .yui3-panel .yui3-widget-hd .yui3-widget-buttons{padding:8px}.yui3-skin-sam .yui3-panel .yui3-widget-bd{padding:10px}.yui3-skin-sam .yui3-panel .yui3-widget-ft{background:#edf5ff;padding:8px;text-align:right}.yui3-skin-sam .yui3-panel .yui3-widget-ft .yui3-button{margin-left:8px}.yui3-skin-sam .yui3-panel .yui3-widget-hd .yui3-button-close{background:transparent;filter:none;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;width:13px;height:13px;padding:0;overflow:hidden;vertical-align:top;*font-size:0;*line-height:0;*letter-spacing:-1000px;*color:#86a5ec;*background:url(/theme/yui_image.php?file=3.18.1/sprite_icons.png) no-repeat 1px 1px}.yui3-skin-sam .yui3-panel .yui3-widget-hd .yui3-button-close:before{content:url(/theme/yui_image.php?file=3.18.1/sprite_icons.png);display:inline-block;text-align:center;font-size:0;line-height:0;width:13px;margin:1px 0 0 1px}.yui3-skin-sam .yui3-panel-hidden .yui3-widget-hd .yui3-button-close{display:none}#yui3-css-stamp.skin-sam-panel{display:none}

View File

@@ -0,0 +1 @@
YUI.add("event-resize",function(e,t){e.Event.define("windowresize",{on:e.UA.gecko&&e.UA.gecko<1.91?function(t,n,r){n._handle=e.Event.attach("resize",function(e){r.fire(e)})}:function(t,n,r){var i=e.config.windowResizeDelay||100;n._handle=e.Event.attach("resize",function(t){n._timer&&n._timer.cancel(),n._timer=e.later(i,e,function(){r.fire(t)})})},detach:function(e,t){t._timer&&t._timer.cancel(),t._handle.detach()}})},"3.18.1",{requires:["node-base","event-synthetic"]});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,89 @@
M.yui.add_module=function(modules){for(var modname in modules){YUI_config.modules[modname]=modules[modname]}
Y.applyConfig(YUI_config)};M.yui.galleryversion='2010.04.21-21-51';M.util=M.util||{};M.str=M.str||{};M.util.image_url=function(imagename,component){if(!component||component==''||component=='moodle'||component=='core'){component='core'}
var url=M.cfg.wwwroot+'/theme/image.php';if(M.cfg.themerev>0&&M.cfg.slasharguments==1){if(!M.cfg.svgicons){url+='/_s'}
url+='/'+M.cfg.theme+'/'+component+'/'+M.cfg.themerev+'/'+imagename}else{url+='?theme='+M.cfg.theme+'&component='+component+'&rev='+M.cfg.themerev+'&image='+imagename;if(!M.cfg.svgicons){url+='&svg=0'}}
return url};M.util.in_array=function(item,array){return array.indexOf(item)!==-1};M.util.init_collapsible_region=function(Y,id,userpref,strtooltip){Y.use('anim',function(Y){new M.util.CollapsibleRegion(Y,id,userpref,strtooltip)})};M.util.CollapsibleRegion=function(Y,id,userpref,strtooltip){this.userpref=userpref;this.div=Y.one('#'+id);var caption=this.div.one('#'+id+'_caption');var a=Y.Node.create('<a href="#"></a>');a.setAttribute('title',strtooltip);while(caption.hasChildNodes()){child=caption.get('firstChild');child.remove();a.append(child)}
caption.append(a);var height=this.div.get('offsetHeight');var collapsedimage='t/collapsed';if(right_to_left()){collapsedimage='t/collapsed_rtl'}
if(this.div.hasClass('collapsed')){this.icon=Y.Node.create('<img src="'+M.util.image_url(collapsedimage,'moodle')+'" alt="" class="icon" />');this.div.setStyle('height',caption.get('offsetHeight')+'px')}else{this.icon=Y.Node.create('<img src="'+M.util.image_url('t/expanded','moodle')+'" alt="" class="icon" />')}
a.append(this.icon);var animation=new Y.Anim({node:this.div,duration:0.3,easing:Y.Easing.easeBoth,to:{height:caption.get('offsetHeight')},from:{height:height}});animation.on('start',()=>M.util.js_pending('CollapsibleRegion'));animation.on('resume',()=>M.util.js_pending('CollapsibleRegion'));animation.on('pause',()=>M.util.js_complete('CollapsibleRegion'));animation.on('end',function(){this.div.toggleClass('collapsed');var collapsedimage='t/collapsed';if(right_to_left()){collapsedimage='t/collapsed_rtl'}else{collapsedimage='t/collapsed'}
if(this.div.hasClass('collapsed')){this.icon.set('src',M.util.image_url(collapsedimage,'moodle'))}else{this.icon.set('src',M.util.image_url('t/expanded','moodle'))}
M.util.js_complete('CollapsibleRegion')},this);a.on('click',function(e,animation){e.preventDefault();if(animation.get('running')){animation.stop()}
animation.set('reverse',this.div.hasClass('collapsed'));if(this.userpref){require(['core_user/repository'],function(UserRepository){UserRepository.setUserPreference(this.userpref,!this.div.hasClass('collapsed'))}.bind(this))}
animation.run()},this,animation)};M.util.CollapsibleRegion.prototype.userpref=null;M.util.CollapsibleRegion.prototype.div=null;M.util.CollapsibleRegion.prototype.icon=null;M.util.set_user_preference=function(name,value){Y.log('M.util.set_user_preference is deprecated. Please use the "core_user/repository" module instead.','warn');require(['core_user/repository'],function(UserRepository){UserRepository.setUserPreference(name,value)})};M.util.show_confirm_dialog=(e,{message,continuelabel,callback=null,scope=null,callbackargs=[],}={})=>{if(e.preventDefault){e.preventDefault()}
require(['core/notification','core/str','core_form/changechecker','core/normalise'],function(Notification,Str,FormChangeChecker,Normalise){if(scope===null&&e.target){scope=e.target}
Notification.saveCancelPromise(Str.get_string('confirmation','admin'),message,continuelabel||Str.get_string('yes','moodle'),).then(()=>{if(callback){callback.apply(scope,callbackargs);return}
if(!e.target){window.console.error(`M.util.show_confirm_dialog: No target found for event`,e);return}
const target=Normalise.getElement(e.target);if(target.closest('a')){window.location=target.closest('a').getAttribute('href');return}else if(target.closest('input')||target.closest('button')){const form=target.closest('form');const hiddenValue=document.createElement('input');hiddenValue.setAttribute('type','hidden');hiddenValue.setAttribute('name',target.getAttribute('name'));hiddenValue.setAttribute('value',target.getAttribute('value'));form.appendChild(hiddenValue);FormChangeChecker.markFormAsDirty(form);form.submit();return}else if(target.closest('form')){const form=target.closest('form');FormChangeChecker.markFormAsDirty(form);form.submit();return}
window.console.error(`Element of type ${target.tagName} is not supported by M.util.show_confirm_dialog.`);return}).catch(()=>{return})})};M.util.init_maximised_embed=function(Y,id){var obj=Y.one('#'+id);if(!obj){return}
var get_htmlelement_size=function(el,prop){if(Y.Lang.isString(el)){el=Y.one('#'+el)}
if(el){var val=el.getStyle(prop);if(val=='auto'){val=el.getComputedStyle(prop)}
val=parseInt(val);if(isNaN(val)){return 0}
return val}else{return 0}};var resize_object=function(){obj.setStyle('display','none');var newwidth=get_htmlelement_size('maincontent','width')-35;if(newwidth>500){obj.setStyle('width',newwidth+'px')}else{obj.setStyle('width','500px')}
var headerheight=get_htmlelement_size('page-header','height');var footerheight=get_htmlelement_size('page-footer','height');var newheight=parseInt(Y.one('body').get('docHeight'))-footerheight-headerheight-100;if(newheight<400){newheight=400}
obj.setStyle('height',newheight+'px');obj.setStyle('display','')};resize_object();Y.use('event-resize',function(Y){Y.on("windowresize",function(){resize_object()})})};M.util.init_frametop=function(Y){Y.all('a').each(function(node){node.set('target','_top')});Y.all('form').each(function(node){node.set('target','_top')})};M.util.init_toggle_class_on_click=function(Y,id,cssselector,toggleclassname,togglecssselector){throw new Error('M.util.init_toggle_class_on_click can not be used any more. Please use jQuery instead.')};M.util.init_colour_picker=function(Y,id,previewconf){Y.use('node','event-mouseenter',function(){var colourpicker={box:null,input:null,image:null,preview:null,current:null,eventClick:null,eventMouseEnter:null,eventMouseLeave:null,eventMouseMove:null,width:300,height:100,factor:5,init:function(){this.input=Y.one('#'+id);this.box=this.input.ancestor().one('.admin_colourpicker');this.image=Y.Node.create('<img alt="" class="colourdialogue" />');this.image.setAttribute('src',M.util.image_url('i/colourpicker','moodle'));this.preview=Y.Node.create('<div class="previewcolour"></div>');this.preview.setStyle('width',this.height/2).setStyle('height',this.height/2).setStyle('backgroundColor',this.input.get('value'));this.current=Y.Node.create('<div class="currentcolour"></div>');this.current.setStyle('width',this.height/2).setStyle('height',this.height/2-1).setStyle('backgroundColor',this.input.get('value'));this.box.setContent('').append(this.image).append(this.preview).append(this.current);if(typeof(previewconf)==='object'&&previewconf!==null){Y.one('#'+id+'_preview').on('click',function(e){if(Y.Lang.isString(previewconf.selector)){Y.all(previewconf.selector).setStyle(previewconf.style,this.input.get('value'))}else{for(var i in previewconf.selector){Y.all(previewconf.selector[i]).setStyle(previewconf.style,this.input.get('value'))}}},this)}
this.eventClick=this.image.on('click',this.pickColour,this);this.eventMouseEnter=Y.on('mouseenter',this.startFollow,this.image,this)},startFollow:function(e){this.eventMouseEnter.detach();this.eventMouseLeave=Y.on('mouseleave',this.endFollow,this.image,this);this.eventMouseMove=this.image.on('mousemove',function(e){this.preview.setStyle('backgroundColor',this.determineColour(e))},this)},endFollow:function(e){this.eventMouseMove.detach();this.eventMouseLeave.detach();this.eventMouseEnter=Y.on('mouseenter',this.startFollow,this.image,this)},pickColour:function(e){var colour=this.determineColour(e);this.input.set('value',colour);this.current.setStyle('backgroundColor',colour)},determineColour:function(e){var eventx=Math.floor(e.pageX-e.target.getX());var eventy=Math.floor(e.pageY-e.target.getY());var imagewidth=this.width;var imageheight=this.height;var factor=this.factor;var colour=[255,0,0];var matrices=[[0,1,0],[-1,0,0],[0,0,1],[0,-1,0],[1,0,0],[0,0,-1]];var matrixcount=matrices.length;var limit=Math.round(imagewidth/matrixcount);var heightbreak=Math.round(imageheight/2);for(var x=0;x<imagewidth;x++){var divisor=Math.floor(x/limit);var matrix=matrices[divisor];colour[0]+=matrix[0]*factor;colour[1]+=matrix[1]*factor;colour[2]+=matrix[2]*factor;if(eventx==x){break}}
var pixel=[colour[0],colour[1],colour[2]];if(eventy<heightbreak){pixel[0]+=Math.floor(((255-pixel[0])/heightbreak)*(heightbreak-eventy));pixel[1]+=Math.floor(((255-pixel[1])/heightbreak)*(heightbreak-eventy));pixel[2]+=Math.floor(((255-pixel[2])/heightbreak)*(heightbreak-eventy))}else if(eventy>heightbreak){pixel[0]=Math.floor((imageheight-eventy)*(pixel[0]/heightbreak));pixel[1]=Math.floor((imageheight-eventy)*(pixel[1]/heightbreak));pixel[2]=Math.floor((imageheight-eventy)*(pixel[2]/heightbreak))}
return this.convert_rgb_to_hex(pixel)},convert_rgb_to_hex:function(rgb){var hex='#';var hexchars="0123456789ABCDEF";for(var i=0;i<3;i++){var number=Math.abs(rgb[i]);if(number==0||isNaN(number)){hex+='00'}else{hex+=hexchars.charAt((number-number%16)/16)+hexchars.charAt(number%16)}}
return hex}};colourpicker.init()})};M.util.init_block_hider=function(Y,config){Y.use('base','node',function(Y){M.util.block_hider=M.util.block_hider||(function(){var blockhider=function(){blockhider.superclass.constructor.apply(this,arguments)};blockhider.prototype={initializer:function(config){this.set('block','#'+this.get('id'));var b=this.get('block'),t=b.one('.title'),a=null,hide,show;if(t&&(a=t.one('.block_action'))){hide=Y.Node.create('<img />').addClass('block-hider-hide').setAttrs({alt:config.tooltipVisible,src:this.get('iconVisible'),tabIndex:0,'title':config.tooltipVisible});hide.on('keypress',this.updateStateKey,this,!0);hide.on('click',this.updateState,this,!0);show=Y.Node.create('<img />').addClass('block-hider-show').setAttrs({alt:config.tooltipHidden,src:this.get('iconHidden'),tabIndex:0,'title':config.tooltipHidden});show.on('keypress',this.updateStateKey,this,!1);show.on('click',this.updateState,this,!1);a.insert(show,0).insert(hide,0)}},updateState:function(e,hide){require(['core_user/repository'],function(UserRepository){UserRepository.setUserPreference(this.get('preference'),hide)}.bind(this));if(hide){this.get('block').addClass('hidden');this.get('block').one('.block-hider-show').focus()}else{this.get('block').removeClass('hidden');this.get('block').one('.block-hider-hide').focus()}},updateStateKey:function(e,hide){if(e.keyCode==13){this.updateState(this,hide)}}};Y.extend(blockhider,Y.Base,blockhider.prototype,{NAME:'blockhider',ATTRS:{id:{},preference:{},iconVisible:{value:M.util.image_url('t/switch_minus','moodle')},iconHidden:{value:M.util.image_url('t/switch_plus','moodle')},block:{setter:function(node){return Y.one(node)}}}});return blockhider})();new M.util.block_hider(config)})};M.util.pending_js=[];M.util.complete_js=[];M.util.js_pending=function(uniqid){if(typeof uniqid!=='undefined'){M.util.pending_js.push(uniqid)}
return M.util.pending_js.length};M.util.js_pending('init');YUI.add('moodle-core-io',function(Y){Y.on('io:start',function(id){M.util.js_pending('io:'+id)});Y.on('io:end',function(id){M.util.js_complete('io:'+id)})},'@VERSION@',{condition:{trigger:'io-base',when:'after'}});M.util.js_complete=function(uniqid){const index=M.util.pending_js.indexOf(uniqid);if(index>=0){M.util.complete_js.push(M.util.pending_js.splice(index,1)[0])}else{window.console.log("Unable to locate key for js_complete call",uniqid)}
return M.util.pending_js.length};M.util.get_string=function(identifier,component,a){var stringvalue;if(M.cfg.developerdebug){if(typeof M.util.get_string_yui_instance==='undefined'){M.util.get_string_yui_instance=new YUI({debug:!0})}
var Y=M.util.get_string_yui_instance}
if(!M.str.hasOwnProperty(component)||!M.str[component].hasOwnProperty(identifier)){stringvalue='[['+identifier+','+component+']]';if(M.cfg.developerdebug){Y.log('undefined string '+stringvalue,'warn','M.util.get_string')}
return stringvalue}
stringvalue=M.str[component][identifier];if(typeof a=='undefined'){return stringvalue}
if(typeof a=='number'||typeof a=='string'){stringvalue=stringvalue.replace(/\{\$a\}/g,a);return stringvalue}
if(typeof a=='object'){for(var key in a){if(typeof a[key]!='number'&&typeof a[key]!='string'){if(M.cfg.developerdebug){Y.log('invalid value type for $a->'+key,'warn','M.util.get_string')}
continue}
var search='{$a->'+key+'}';search=search.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,'\\$&');search=new RegExp(search,'g');stringvalue=stringvalue.replace(search,a[key])}
return stringvalue}
if(M.cfg.developerdebug){Y.log('incorrect placeholder type','warn','M.util.get_string')}
return stringvalue};M.util.focus_login_form=function(Y){Y.log('M.util.focus_login_form no longer does anything. Please use jquery instead.','warn','javascript-static.js')};M.util.focus_login_error=function(Y){Y.log('M.util.focus_login_error no longer does anything. Please use jquery instead.','warn','javascript-static.js')};M.util.add_lightbox=function(Y,node){var WAITICON={'pix':"i/loading_small",'component':'moodle'};if(node.one('.lightbox')){return node.one('.lightbox')}
node.setStyle('position','relative');var waiticon=Y.Node.create('<img />').setAttribute('src',M.util.image_url(WAITICON.pix,WAITICON.component)).addClass('icon');var lightbox=Y.Node.create('<div></div>').setStyles({'opacity':'.75','position':'absolute','width':'100%','height':'100%','top':0,'left':0,'paddingTop':'50%','backgroundColor':'white','textAlign':'center'}).setAttribute('class','lightbox').hide();lightbox.appendChild(waiticon);node.append(lightbox);return lightbox}
M.util.add_spinner=function(Y,node){var WAITICON={'pix':"i/loading_small",'component':'moodle'};if(node.one('.spinner')){return node.one('.spinner')}
var spinner=Y.Node.create('<img />').setAttribute('src',M.util.image_url(WAITICON.pix,WAITICON.component)).addClass('spinner icon').hide();node.append(spinner);return spinner}
function checkall(){throw new Error('checkall can not be used any more. Please use jQuery instead.')}
function checknone(){throw new Error('checknone can not be used any more. Please use jQuery instead.')}
function select_all_in_element_with_id(id,checked){throw new Error('select_all_in_element_with_id can not be used any more. Please use jQuery instead.')}
function select_all_in(elTagName,elClass,elId){throw new Error('select_all_in can not be used any more. Please use jQuery instead.')}
function deselect_all_in(elTagName,elClass,elId){throw new Error('deselect_all_in can not be used any more. Please use jQuery instead.')}
function confirm_if(expr,message){throw new Error('confirm_if can not be used any more.')}
function findParentNode(el,elName,elClass,elId){throw new Error('findParentNode can not be used any more. Please use jQuery instead.')}
function unmaskPassword(id){var pw=document.getElementById(id);var chb=document.getElementById(id+'unmask');if(Y.UA.ie==0||Y.UA.ie>=9){if(chb.checked){pw.type="text"}else{pw.type="password"}}else{try{if(chb.checked){var newpw=document.createElement('<input type="text" autocomplete="off" name="'+pw.name+'">')}else{var newpw=document.createElement('<input type="password" autocomplete="off" name="'+pw.name+'">')}
newpw.attributes['class'].nodeValue=pw.attributes['class'].nodeValue}catch(e){var newpw=document.createElement('input');newpw.setAttribute('autocomplete','off');newpw.setAttribute('name',pw.name);if(chb.checked){newpw.setAttribute('type','text')}else{newpw.setAttribute('type','password')}
newpw.setAttribute('class',pw.getAttribute('class'))}
newpw.id=pw.id;newpw.size=pw.size;newpw.onblur=pw.onblur;newpw.onchange=pw.onchange;newpw.value=pw.value;pw.parentNode.replaceChild(newpw,pw)}}
function filterByParent(elCollection,parentFinder){throw new Error('filterByParent can not be used any more. Please use jQuery instead.')}
function fix_column_widths(){Y.log('fix_column_widths() no longer does anything. Please remove it from your code.','warn','javascript-static.js')}
function fix_column_width(colName){Y.log('fix_column_width() no longer does anything. Please remove it from your code.','warn','javascript-static.js')}
function insertAtCursor(myField,myValue){if(document.selection){myField.focus();sel=document.selection.createRange();sel.text=myValue}else if(myField.selectionStart||myField.selectionStart=='0'){var startPos=myField.selectionStart;var endPos=myField.selectionEnd;myField.value=myField.value.substring(0,startPos)+myValue+myField.value.substring(endPos,myField.value.length)}else{myField.value+=myValue}}
function increment_filename(filename,ignoreextension){var extension='';var basename=filename;if(!ignoreextension){var dotpos=filename.lastIndexOf('.');if(dotpos!==-1){basename=filename.substr(0,dotpos);extension=filename.substr(dotpos,filename.length)}}
var number=0;var hasnumber=basename.match(/^(.*) \((\d+)\)$/);if(hasnumber!==null){number=parseInt(hasnumber[2],10);basename=hasnumber[1]}
number++;var newname=basename+' ('+number+')'+extension;return newname}
function right_to_left(){var body=Y.one('body');var rtl=!1;if(body&&body.hasClass('dir-rtl')){rtl=!0}
return rtl}
function openpopup(event,args){if(event){if(event.preventDefault){event.preventDefault()}else{event.returnValue=!1}}
var nameregex=/[^a-z0-9_]/i;if(typeof args.name!=='string'){args.name='_blank'}else if(args.name.match(nameregex)){if(M.cfg.developerdebug){alert('DEVELOPER NOTICE: Invalid \'name\' passed to openpopup(): '+args.name)}
args.name=args.name.replace(nameregex,'_')}
var fullurl=args.url;if(!args.url.match(/https?:\/\//)){fullurl=M.cfg.wwwroot+args.url}
if(args.fullscreen){args.options=args.options.replace(/top=\d+/,'top=0').replace(/left=\d+/,'left=0').replace(/width=\d+/,'width='+screen.availWidth).replace(/height=\d+/,'height='+screen.availHeight)}
var windowobj=window.open(fullurl,args.name,args.options);if(!windowobj){return!0}
if(args.fullscreen){var hackcount=100;var get_size_exactly_right=function(){windowobj.moveTo(0,0);windowobj.resizeTo(screen.availWidth,screen.availHeight);if(hackcount>0&&(windowobj.innerHeight<10||windowobj.innerWidth<10)){hackcount-=1;setTimeout(get_size_exactly_right,10)}}
setTimeout(get_size_exactly_right,0)}
windowobj.focus();return!1}
function close_window(e){if(e.preventDefault){e.preventDefault()}else{e.returnValue=!1}
window.close()}
function focuscontrol(controlid){var control=document.getElementById(controlid);if(control){control.focus()}}
function old_onload_focus(formid,controlname){if(document.forms[formid]&&document.forms[formid].elements&&document.forms[formid].elements[controlname]){document.forms[formid].elements[controlname].focus()}}
function build_querystring(obj){return convert_object_to_string(obj,'&')}
function build_windowoptionsstring(obj){return convert_object_to_string(obj,',')}
function convert_object_to_string(obj,separator){if(typeof obj!=='object'){return null}
var list=[];for(var k in obj){k=encodeURIComponent(k);var value=obj[k];if(obj[k]instanceof Array){for(var i in value){list.push(k+'[]='+encodeURIComponent(value[i]))}}else{list.push(k+'='+encodeURIComponent(value))}}
return list.join(separator)}
function stripHTML(str){throw new Error('stripHTML can not be used any more. Please use jQuery instead.')}
function updateProgressBar(id,percent,msg,estimate,error){var event,el=document.getElementById(id),eventData={};if(!el){return}
eventData.message=msg;eventData.percent=percent;eventData.estimate=estimate;eventData.error=error;try{event=new CustomEvent('update',{bubbles:!1,cancelable:!0,detail:eventData})}catch(exception){if(!(exception instanceof TypeError)){throw exception}
event=document.createEvent('CustomEvent');event.initCustomEvent('update',!1,!0,eventData);event.prototype=window.Event.prototype}
el.dispatchEvent(event)}
M.util.help_popups={setup:function(Y){Y.one('body').delegate('click',this.open_popup,'a.helplinkpopup',this)},open_popup:function(e){e.preventDefault();var anchor=e.target.ancestor('a',!0);var args={'name':'popup','url':anchor.getAttribute('href'),'options':''};var options=['height=600','width=800','top=0','left=0','menubar=0','location=0','scrollbars','resizable','toolbar','status','directories=0','fullscreen=0','dependent']
args.options=options.join(',');openpopup(e,args)}}
M.core_custom_menu={init:function(Y,nodeid){var node=Y.one('#'+nodeid);if(node){Y.use('node-menunav',function(Y){node.removeClass('javascript-disabled');node.plug(Y.Plugin.NodeMenuNav)})}}};M.form=M.form||{};M.form.init_smartselect=function(){throw new Error('M.form.init_smartselect can not be used any more.')};M.util.init_skiplink=function(Y){Y.one(Y.config.doc.body).delegate('click',function(e){e.preventDefault();e.stopPropagation();var node=Y.one(this.getAttribute('href'));node.setAttribute('tabindex','-1');node.focus();return!0},'a.skip')}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,10 @@
/**
* This module depends on the real jquery - and returns the non-global version of it.
*
* @module jquery-private
* @package core
* @copyright 2015 Damyon Wiese <damyon@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery'],function($){return $.noConflict(!0)})

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,6 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMid meet">
<path d="M9.81937 11.8504C10.0146 11.6551 10.0146 11.3385 9.81937 11.1433C9.62411 10.948 9.30753 10.948 9.11227 11.1433L7.11227 13.1433C7.0185 13.237 6.96582 13.3642 6.96582 13.4968C6.96582 13.6294 7.0185 13.7566 7.11227 13.8504L9.11227 15.8504C9.30753 16.0456 9.62411 16.0456 9.81937 15.8504C10.0146 15.6551 10.0146 15.3385 9.81937 15.1433L8.17293 13.4968L9.81937 11.8504Z" fill="#212529"/>
<path d="M14.1801 16.8567C13.9849 16.6615 13.9849 16.3449 14.1801 16.1496L15.8266 14.5032L14.1801 12.8567C13.9849 12.6615 13.9849 12.3449 14.1801 12.1496C14.3754 11.9544 14.692 11.9544 14.8872 12.1496L16.8872 14.1496C16.981 14.2434 17.0337 14.3706 17.0337 14.5032C17.0337 14.6358 16.981 14.763 16.8872 14.8567L14.8872 16.8567C14.692 17.052 14.3754 17.052 14.1801 16.8567Z" fill="#212529"/>
<path d="M13.3082 11.0781C13.3803 10.8115 13.2227 10.537 12.9561 10.4649C12.6896 10.3928 12.415 10.5504 12.3429 10.817L10.6914 16.9221C10.6193 17.1886 10.7769 17.4632 11.0434 17.5353C11.31 17.6074 11.5846 17.4498 11.6567 17.1832L13.3082 11.0781Z" fill="#212529"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.5 19V8.82843C19.5 8.16539 19.2366 7.5295 18.7678 7.06066L14.9393 3.23223C14.4705 2.76339 13.8346 2.5 13.1716 2.5H7C5.61929 2.5 4.5 3.61929 4.5 5V19C4.5 20.3807 5.61929 21.5 7 21.5H17C18.3807 21.5 19.5 20.3807 19.5 19ZM7 3.5C6.17157 3.5 5.5 4.17157 5.5 5V19C5.5 19.8284 6.17157 20.5 7 20.5H17C17.8284 20.5 18.5 19.8284 18.5 19V9C18.5 8.72386 18.2761 8.5 18 8.5H15C14.1716 8.5 13.5 7.82843 13.5 7V4C13.5 3.72386 13.2761 3.5 13 3.5H7ZM17.7929 7.5L14.5 4.20711V7C14.5 7.27614 14.7239 7.5 15 7.5H17.7929Z" fill="#212529"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,77 @@
<!DOCTYPE html>
<!-- saved from url=(0089)https://lyceum.bates.edu/pluginfile.php/582748/mod_resource/content/1/mypage.html?embed=1 -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>DCS 211 Git &amp; GitHub Collaboration Lab</title>
</head>
<body data-new-gr-c-s-check-loaded="14.1272.0" data-gr-ext-installed="">
<h1>DCS 211: Git and GitHub Collaboration</h1>
<h1>Instructor: Chris Agbonkhese </h1>
<h2>Today's Focus</h2>
<ul>
<li>Understanding Git collaboration workflow</li>
<li>Working with shared repositories on GitHub</li>
<li>Experiencing merge conflicts</li>
<li>Learning how to resolve conflicts professionally</li>
</ul>
<h2>Lab Activity</h2>
<p>
You will work in groups of <strong>two students</strong>.
Each group will collaborate on a shared GitHub repository.
</p>
<h3>Tasks</h3>
<ol>
<li>Clone the repository provided by the instructor.</li>
<li>Each member edits the same Python file.</li>
<li>Commit and push your changes.</li>
<li>Observe any merge conflicts that occur.</li>
<li>Resolve the conflict as a team.</li>
</ol>
<h3>Time Allocation</h3>
<ul>
<li>Lab duration: <strong>40 minutes</strong></li>
<li>Report submission deadline:
<strong>20 minutes after class</strong></li>
</ul>
<h2>Deliverables</h2>
<ul>
<li>Screenshot of your GitHub commits</li>
<li>Explanation of any conflict encountered</li>
<li>Steps taken to resolve it</li>
</ul>
<hr>
<p><em>Goal:</em> By the end of this lab, you should be comfortable
collaborating using GitHub and handling conflicts — a key real-world skill
for software development and research collaboration.</p>
</body><grammarly-desktop-integration data-grammarly-shadow-root="true"><template shadowrootmode="open"><style>
div.grammarly-desktop-integration {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select:none;
user-select:none;
}
div.grammarly-desktop-integration:before {
content: attr(data-content);
}
</style><div aria-label="grammarly-integration" role="group" tabindex="-1" class="grammarly-desktop-integration" data-content="{&quot;mode&quot;:&quot;full&quot;,&quot;isActive&quot;:true,&quot;isUserDisabled&quot;:false}"></div></template></grammarly-desktop-integration></html>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,23 @@
<!-- saved from url=(0011)about:blank -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body data-new-gr-c-s-check-loaded="14.1272.0" data-gr-ext-installed=""><iframe height="0" width="0" src="https://www.googletagmanager.com/static/service_worker/6240/sw_iframe.html?origin=https%3A%2F%2Flyceum.bates.edu" style="display: none; visibility: hidden;"></iframe></body><grammarly-desktop-integration data-grammarly-shadow-root="true"><template shadowrootmode="open"><style>
div.grammarly-desktop-integration {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select:none;
user-select:none;
}
div.grammarly-desktop-integration:before {
content: attr(data-content);
}
</style><div aria-label="grammarly-integration" role="group" tabindex="-1" class="grammarly-desktop-integration" data-content="{&quot;mode&quot;:&quot;full&quot;,&quot;isActive&quot;:true,&quot;isUserDisabled&quot;:false}"></div></template></grammarly-desktop-integration></html>

File diff suppressed because one or more lines are too long

4
names.txt Normal file
View File

@@ -0,0 +1,4 @@
Chris
Alex
Jordan
Taylor