{"version":3,"sources":["webpack:///./packages/jquery-scroll-to-visible/index.js","webpack:///./public/javascripts/translations/modal.js","webpack:///./ui/shims/dummyI18nResource.js?1911","webpack:///./ui/shared/instui-bindings/react/InstuiModal.js","webpack:///./ui/shared/axios/index.js","webpack:///./packages/jqueryui/droppable.js","webpack:///./public/javascripts/translations/lib.text_helper.js","webpack:///./ui/shims/dummyI18nResource.js?24a1","webpack:///./ui/shared/util/TextHelper.coffee","webpack:///./node_modules/@instructure/ui-prop-types/es/childrenOrValue.js","webpack:///./ui/shared/util/templateData.js","webpack:///./packages/jquery-tree/index.js","webpack:///./public/javascripts/translations/instructure_misc_plugins.js","webpack:///./ui/shims/dummyI18nResource.js?726f","webpack:///./ui/shared/jquery/jquery.instructure_misc_plugins.js","webpack:///./ui/shared/external-apps/iframeAllowances.js","webpack:///./node_modules/@instructure/ui-dom-utils/es/findFocusable.js","webpack:///./node_modules/@instructure/ui-heading/es/Heading/theme.js","webpack:///./node_modules/@instructure/ui-heading/es/Heading/themeAdapter.js","webpack:///./node_modules/@instructure/ui-heading/es/Heading/index.js","webpack:///./node_modules/@instructure/ui-dom-utils/es/elementMatches.js"],"names":["fn","scrollToVisible","obj","options","$obj","length","innerOffset","offset","width","outerWidth","height","outerHeight","top","bottom","left","right","currentTop","this","selector","windowScrollTop","scrollTop","currentLeft","scrollLeft","currentHeight","currentWidth","outerOffset","each","e","tagName","window","mergeI18nTranslations","JSON","parse","scoped","getLiveRegion","document","getElementById","CanvasInstUIModal","label","closeButtonLabel","onDismiss","children","otherPropsToPassOnToModal","Modal","liveRegion","Header","CloseButton","data-testid","placement","onClick","I18n","t","Heading","forEach","prop","defaultProps","axios","defaults","xsrfCookieName","xsrfHeaderName","originalDefaults","headers","common","Accept","widget","version","widgetEventPrefix","accept","activeClass","addClasses","greedy","hoverClass","scope","tolerance","_create","o","isover","isout","isFunction","d","is","proportions","element","offsetWidth","offsetHeight","ui","ddmanager","droppables","push","addClass","_destroy","drop","i","splice","removeClass","_setOption","key","value","Widget","prototype","apply","arguments","_activate","event","draggable","current","_trigger","_deactivate","_over","currentItem","call","_out","_drop","custom","childrenIntersection","find","not","inst","data","disabled","intersect","extend","c","helper","position","positionAbs","droppable","toleranceMode","x1","absolute","x2","helperProportions","y1","y2","l","r","b","draggableLeft","clickOffset","click","draggableTop","isOver","prepareOffsets","m","type","list","andSelf","droppablesLoop","j","visible","css","dropped","dragStart","parentsUntil","bind","refreshPositions","drag","greedyChild","intersects","parentInstance","parent","parents","dragStop","unbind","AUTO_LINKIFY_PLACEHOLDER","AUTO_LINKIFY_REGEX","th","quoteClump","lines","raw","join","formatMessage","message","links","placeholderBlocks","replace","match","link","RegExp","shift","processedLines","quoteBlock","line","delimit","number","isNaN","String","sign","abs","Math","integer","floor","result","mod","truncateText","string","max","ellipsis","wordSeparator","trim","truncateAt","pos","indexOf","substring","plainText","childrenOrValue","props","propName","componentName","as","Error","concat","$","fillTemplateData","iterator","$el","attr","id","contentChange","item","except","inArray","dataValues","toString","$found_all","avoid","$found","closest","htmlValues","html","hasClass","toUpperCase","val","str","htmlEscape","hrefValues","oldHref","oldRel","oldName","hasOwnProperty","name","newHref","replaceTags","encodeURIComponent","orig","text","triggerHandler","getTemplateData","textValues","_this","$item","charCodeAt","$elem","getTemplateValue","opts","instTree","binded","tree","it","ddover","autoclose","overrideEvents","multi","dragdrop","onDblClick","onExpand","onCollapse","onAddNode","onEditNode","onDeleteNode","onDrag","onDrop","InitInstTree","$sep","filter","prev","get","before","end","IeSetStyles","Clean","AddSigns","BindEvents","CancelDragDrop","InitDragDrop","cursor","browser","msie","distance","appendTo","li","dd","opera","imgFolder","lvlok","ali","hli","remove","AddNode","activeElement","lin","cn","sep","nli","ncont","ok","node","childul","iprnt","after","nextAll","append","ExpandNode","focus","select","blur","SaveInput","EditNode","replaceWith","DeleteNode","prnt","input","hide","next","on","$currentSelected","$fileListContainer","which","preventDefault","stopPropagation","$upNode","FindNode","SelectNode","FileScrollOffset","$downNode","expanded","CollapseNode","parentNode","eq","onEnter","$treeItems","$lastItem","last","$firstItem","first","clicked","target","ToggleNode","ctrlKey","dblclick","siblings","show","visibility","$node","direction","currentIndex","index","newIndex","leafHight","seperatorHeight","seperatorOffset","nodeOffset","containerOffset","setOptions","prompt","opt","optHtml","ifExists","func","scrollbarWidth","$div","$innerDiv","w1","innerWidth","w2","dim","speed","animate","opacity","undim","confirmDelete","$object","$dialog","noMessage","no_message","onContinue","cancelled","confirmed","url","success","fadeOut","prepareData","authenticity_token","ajaxJSON","request","status","error","unhandledXHRs","skipConfirmations","dialog","dialog_options","confirmation_class","includes","modal","close","buttons","class","confirm","fragmentChange","query","location","search","split","query_hash","$doc","found","_checkFragments","fragmentList","doc","fragment","setTimeout","hash","idx","clickLink","showIf","bool","disableIf","indicate","$indicator","zIndex","container","createElement","display","border","backgroundColor","mouseover","stop","singleFlash","fadeIn","scroll","hasScrollbar","clientHeight","scrollHeight","log","msg","console","fillWindowWithMe","minHeight","$this","$wrapper","$main","$not_right_side","$window","$toResize","add","alsoResize","fillWindowWithThisElement","spaceLeftForThis","newHeight","onResize","autoGrowInput","maxWidth","minWidth","comfortZone","testSubject","fontSize","fontFamily","fontWeight","letterSpacing","whiteSpace","check","testerWidth","newWidth","isValidWidthChange","insertAfter","iframeAllowances","allowances","ENV","LTI_LAUNCH_FRAME_ALLOWANCES","findFocusable","el","shouldSearchRootNode","querySelectorAll","focusableSelector","matches","Array","from","focusable","hidden","cs","positioned","POS","style","toLowerCase","getPropertyValue","body","generator","_ref","borders","colors","spacing","typography","lineHeight","lineHeightFit","h1FontSize","fontSizeXXLarge","h1FontWeight","fontWeightLight","h1FontFamily","h2FontSize","fontSizeXLarge","h2FontWeight","fontWeightNormal","h2FontFamily","h3FontSize","fontSizeLarge","h3FontWeight","fontWeightBold","h3FontFamily","h4FontSize","fontSizeMedium","h4FontWeight","h4FontFamily","h5FontSize","fontSizeSmall","h5FontWeight","h5FontFamily","primaryInverseColor","textLightest","primaryColor","textDarkest","secondaryColor","textDark","secondaryInverseColor","textLight","borderPadding","xxxSmall","borderColor","borderMedium","borderWidth","widthSmall","borderStyle","canvas","variables","_ref2","fontFamilyHeading","map","themeAdapter","_dec","_dec2","_dec3","_class","_class2","_temp","styles","componentId","template","theme","deprecated","testable","_Component","_super","_classnames","_this$props","color","level","margin","elementRef","ElementType","getElementType","View","Object","assign","passthroughProps","className","root","displayName","propTypes","oneOf","elementType","elementMatches","selectorString","msMatchesSelector"],"mappings":"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","file":"132-c-e1f6cc0e31.js","sourcesContent":["/*\n * Copyright (C) 2011 - present Instructure, Inc.\n *\n * This file is part of Canvas.\n *\n * Canvas is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, version 3 of the License.\n *\n * Canvas is distributed in the hope that it will be useful, but WITHOUT ANY\n * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n * A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License along\n * with this program. If not, see .\n */\n\n// Scrolls the supplied object until its visible. Call from\n// (\"html,body\") to scroll the window.\n\nimport $ from 'jquery'\nimport './jquery.scrollTo'\n\n$.fn.scrollToVisible = function(obj) {\n const options = {}\n const $obj = $(obj)\n\n if ($obj.length === 0) {\n return\n }\n let innerOffset = $obj.offset(),\n width = $obj.outerWidth(),\n height = $obj.outerHeight(),\n top = innerOffset.top,\n bottom = top + height,\n left = innerOffset.left,\n right = left + width,\n currentTop = this.selector == 'html,body' ? $.windowScrollTop() : this.scrollTop(),\n currentLeft = this.scrollLeft(),\n currentHeight = this.outerHeight(),\n currentWidth = this.outerWidth()\n\n if (this.selector != 'html,body') {\n let outerOffset = $('body').offset()\n this.each(function() {\n try {\n outerOffset = $(this).offset()\n return false\n } catch (e) {}\n })\n top -= outerOffset.top\n bottom -= outerOffset.top\n left -= outerOffset.left\n right -= outerOffset.left\n }\n\n if (this[0].tagName == 'HTML' || this[0].tagName == 'BODY') {\n currentHeight = $(window).height()\n if ($('#wizard_box:visible').length > 0) {\n currentHeight -= $('#wizard_box:visible').height()\n }\n currentWidth = $(window).width()\n top -= currentTop\n left -= currentLeft\n bottom -= currentTop\n right -= currentLeft\n }\n if (top < 0 || (currentHeight < height && bottom > currentHeight)) {\n options.scrollTop = top + currentTop\n } else if (bottom > currentHeight) {\n options.scrollTop = bottom + currentTop - currentHeight + 20\n }\n if (left < 0) {\n options.scrollLeft = left + currentLeft\n } else if (right > currentWidth) {\n options.scrollLeft = right + currentLeft - currentWidth + 20\n }\n if (options.scrollTop == 1) {\n options.scrollTop = 0\n }\n if (options.scrollLeft == 1) {\n options.scrollLeft = 0\n }\n\n this.scrollTop(options.scrollTop)\n this.scrollLeft(options.scrollLeft)\n\n return this\n}\n","// this file was auto-generated by rake i18n:generate_js.\n// you probably shouldn't edit it directly\nimport mergeI18nTranslations from '@canvas/i18n/mergeI18nTranslations.js';\n\n// we use JSON.parse here instead of just loading it as a javascript object literal\n// because according to https://v8.dev/blog/cost-of-javascript-2019#json that is faster\nmergeI18nTranslations(JSON.parse(\"{\\\"ar\\\":{\\\"close_d634289d\\\":\\\"إغلاق\\\"},\\\"ca\\\":{\\\"close_d634289d\\\":\\\"Tanca\\\"},\\\"cy\\\":{\\\"close_d634289d\\\":\\\"Cau\\\"},\\\"da\\\":{\\\"close_d634289d\\\":\\\"Luk\\\"},\\\"da-x-k12\\\":{\\\"close_d634289d\\\":\\\"Luk\\\"},\\\"de\\\":{\\\"close_d634289d\\\":\\\"Schließen\\\"},\\\"el\\\":{\\\"close_d634289d\\\":\\\"Κλείσιμο\\\"},\\\"en\\\":{\\\"close_d634289d\\\":\\\"Close\\\"},\\\"en-AU\\\":{\\\"close_d634289d\\\":\\\"Close\\\"},\\\"en-CA\\\":{\\\"close_d634289d\\\":\\\"Close\\\"},\\\"en-GB\\\":{\\\"close_d634289d\\\":\\\"Close\\\"},\\\"es\\\":{\\\"close_d634289d\\\":\\\"Cerrar\\\"},\\\"fa\\\":{\\\"close_d634289d\\\":\\\"بستن\\\"},\\\"fi\\\":{\\\"close_d634289d\\\":\\\"Sulje\\\"},\\\"fr\\\":{\\\"close_d634289d\\\":\\\"Fermer\\\"},\\\"fr-CA\\\":{\\\"close_d634289d\\\":\\\"Fermer\\\"},\\\"he\\\":{\\\"close_d634289d\\\":\\\"סגירה\\\"},\\\"ht\\\":{\\\"close_d634289d\\\":\\\"Fèmen\\\"},\\\"hu\\\":{\\\"close_d634289d\\\":\\\"Bezárás\\\"},\\\"hy\\\":{\\\"close_d634289d\\\":\\\"Փակել\\\"},\\\"is\\\":{\\\"close_d634289d\\\":\\\"Loka\\\"},\\\"it\\\":{\\\"close_d634289d\\\":\\\"Chiudi\\\"},\\\"ja\\\":{\\\"close_d634289d\\\":\\\"閉じる\\\"},\\\"ko\\\":{\\\"close_d634289d\\\":\\\"닫기\\\"},\\\"mi\\\":{\\\"close_d634289d\\\":\\\"Katia\\\"},\\\"nb\\\":{\\\"close_d634289d\\\":\\\"Lukk\\\"},\\\"nb-x-k12\\\":{\\\"close_d634289d\\\":\\\"Lukk\\\"},\\\"nl\\\":{\\\"close_d634289d\\\":\\\"Sluiten\\\"},\\\"nn\\\":{\\\"close_d634289d\\\":\\\"Lukk\\\"},\\\"pl\\\":{\\\"close_d634289d\\\":\\\"Zamknij\\\"},\\\"pt\\\":{\\\"close_d634289d\\\":\\\"Fechar\\\"},\\\"pt-BR\\\":{\\\"close_d634289d\\\":\\\"Fechar\\\"},\\\"ru\\\":{\\\"close_d634289d\\\":\\\"Закрыть\\\"},\\\"sl\\\":{\\\"close_d634289d\\\":\\\"Zapri\\\"},\\\"sv\\\":{\\\"close_d634289d\\\":\\\"Stäng\\\"},\\\"sv-x-k12\\\":{\\\"close_d634289d\\\":\\\"Stäng\\\"},\\\"tr\\\":{\\\"close_d634289d\\\":\\\"Kapat\\\"},\\\"uk\\\":{\\\"close_d634289d\\\":\\\"Закрити\\\"},\\\"zh-Hans\\\":{\\\"close_d634289d\\\":\\\"关闭\\\"},\\\"zh-Hant\\\":{\\\"close_d634289d\\\":\\\"關閉\\\"}}\"));\n","\n import I18n from '@canvas/i18n/i18nObj';\n \n import 'translations/modal';\n import 'translations/_core';\n \n import 'translations/_core_en';\n\n export default I18n.scoped('modal');\n ","/*\n * Copyright (C) 2017 - present Instructure, Inc.\n *\n * This file is part of Canvas.\n *\n * Canvas is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, version 3 of the License.\n *\n * Canvas is distributed in the hope that it will be useful, but WITHOUT ANY\n * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n * A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License along\n * with this program. If not, see .\n */\n\nimport React from 'react'\nimport {string} from 'prop-types'\nimport {CloseButton} from '@instructure/ui-buttons'\nimport {Heading} from '@instructure/ui-heading'\nimport I18n from 'i18n!modal'\nimport {Modal} from '@instructure/ui-modal'\n\n/*\n---\nThis is just a wrapper around the default instructure-ui Modal that:\n * provides a translated close button label that works with Canvas's I18n\n * sets a header title for you if you provide a `label` prop\n\nUse this whenever you don't want to do anything custom with your header or your close button\n\nYou should be able to use it exactly like you'd use an instUi Modal by changing:\nimport {Modal} from '@instructure/ui-overlays'\nto\nimport Modal from '../shared/components/InstuiModal'\n\n\n
\n content of the modal goes here, notice you don't need to do anything for the close button.\n \n \n  \n \n \n
\n\n\n---\n*/\nfunction getLiveRegion() {\n return document.getElementById('flash_screenreader_holder')\n}\n\nexport default function CanvasInstUIModal({\n label,\n closeButtonLabel,\n onDismiss,\n children,\n ...otherPropsToPassOnToModal\n}) {\n return (\n \n \n \n {closeButtonLabel || I18n.t('Close')}\n \n {label}\n \n {children}\n \n )\n}\n\n;['Header', 'Body', 'Footer'].forEach(prop => (CanvasInstUIModal[prop] = Modal[prop]))\n\nCanvasInstUIModal.propTypes = {\n ...Modal.propTypes,\n // InstUI has marked closeButtonLabel as deprecated, but we still allow it.\n // if you just want the default of `I18n.t('Close')` don't pass anything,\n // but if you want something different pass closeButtonLabel=\"something different\"\n closeButtonLabel: string\n}\n\nCanvasInstUIModal.defaultProps = {\n closeButtonLabel: undefined\n}\n","/*\n * Copyright (C) 2015 - present Instructure, Inc.\n *\n * This file is part of Canvas.\n *\n * Canvas is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, version 3 of the License.\n *\n * Canvas is distributed in the hope that it will be useful, but WITHOUT ANY\n * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n * A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License along\n * with this program. If not, see .\n */\n\nimport axios from 'axios'\n\n// Add CSRF stuffs to make Canvas happy when we are making requests with axios\naxios.defaults.xsrfCookieName = '_csrf_token'\naxios.defaults.xsrfHeaderName = 'X-CSRF-Token'\n\n// Handle stringified IDs for JSON responses\nconst originalDefaults = axios.defaults.headers.common.Accept\naxios.defaults.headers.common.Accept = 'application/json+canvas-string-ids, ' + originalDefaults\n\n// Rails checks this header to decide if a request is an xhr request\naxios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'\n\nexport default axios\n","/*!\n * jQuery UI Droppable @VERSION\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Droppables\n *\n * Depends:\n *\tjquery.ui.core.js\n *\tjquery.ui.widget.js\n *\tjquery.ui.mouse.js\n *\tjquery.ui.draggable.js\n */\nimport $ from 'jquery'\nimport './core'\nimport './widget'\nimport './mouse'\nimport './draggable'\n\n$.widget(\"ui.droppable\", {\n\tversion: \"@VERSION\",\n\twidgetEventPrefix: \"drop\",\n\toptions: {\n\t\taccept: '*',\n\t\tactiveClass: false,\n\t\taddClasses: true,\n\t\tgreedy: false,\n\t\thoverClass: false,\n\t\tscope: 'default',\n\t\ttolerance: 'intersect'\n\t},\n\t_create: function() {\n\n\t\tvar o = this.options, accept = o.accept;\n\t\tthis.isover = 0; this.isout = 1;\n\n\t\tthis.accept = $.isFunction(accept) ? accept : function(d) {\n\t\t\treturn d.is(accept);\n\t\t};\n\n\t\t//Store the droppable's proportions\n\t\tthis.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };\n\n\t\t// Add the reference and positions to the manager\n\t\t$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];\n\t\t$.ui.ddmanager.droppables[o.scope].push(this);\n\n\t\t(o.addClasses && this.element.addClass(\"ui-droppable\"));\n\n\t},\n\n\t_destroy: function() {\n\t\tvar drop = $.ui.ddmanager.droppables[this.options.scope];\n\t\tfor ( var i = 0; i < drop.length; i++ )\n\t\t\tif ( drop[i] == this )\n\t\t\t\tdrop.splice(i, 1);\n\n\t\tthis.element.removeClass(\"ui-droppable ui-droppable-disabled\");\n\t},\n\n\t_setOption: function(key, value) {\n\n\t\tif(key == 'accept') {\n\t\t\tthis.accept = $.isFunction(value) ? value : function(d) {\n\t\t\t\treturn d.is(value);\n\t\t\t};\n\t\t}\n\t\t$.Widget.prototype._setOption.apply(this, arguments);\n\t},\n\n\t_activate: function(event) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\t\tif(this.options.activeClass) this.element.addClass(this.options.activeClass);\n\t\t(draggable && this._trigger('activate', event, this.ui(draggable)));\n\t},\n\n\t_deactivate: function(event) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\t\tif(this.options.activeClass) this.element.removeClass(this.options.activeClass);\n\t\t(draggable && this._trigger('deactivate', event, this.ui(draggable)));\n\t},\n\n\t_over: function(event) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\t\tif (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element\n\n\t\tif (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {\n\t\t\tif(this.options.hoverClass) this.element.addClass(this.options.hoverClass);\n\t\t\tthis._trigger('over', event, this.ui(draggable));\n\t\t}\n\n\t},\n\n\t_out: function(event) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\t\tif (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element\n\n\t\tif (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {\n\t\t\tif(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);\n\t\t\tthis._trigger('out', event, this.ui(draggable));\n\t\t}\n\n\t},\n\n\t_drop: function(event,custom) {\n\n\t\tvar draggable = custom || $.ui.ddmanager.current;\n\t\tif (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element\n\n\t\tvar childrenIntersection = false;\n\t\tthis.element.find(\":data(droppable)\").not(\".ui-draggable-dragging\").each(function() {\n\t\t\tvar inst = $.data(this, 'droppable');\n\t\t\tif(\n\t\t\t\tinst.options.greedy\n\t\t\t\t&& !inst.options.disabled\n\t\t\t\t&& inst.options.scope == draggable.options.scope\n\t\t\t\t&& inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element))\n\t\t\t\t&& $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)\n\t\t\t) { childrenIntersection = true; return false; }\n\t\t});\n\t\tif(childrenIntersection) return false;\n\n\t\tif(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {\n\t\t\tif(this.options.activeClass) this.element.removeClass(this.options.activeClass);\n\t\t\tif(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);\n\t\t\tthis._trigger('drop', event, this.ui(draggable));\n\t\t\treturn this.element;\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tui: function(c) {\n\t\treturn {\n\t\t\tdraggable: (c.currentItem || c.element),\n\t\t\thelper: c.helper,\n\t\t\tposition: c.position,\n\t\t\toffset: c.positionAbs\n\t\t};\n\t}\n\n});\n\n$.ui.intersect = function(draggable, droppable, toleranceMode) {\n\n\tif (!droppable.offset) return false;\n\n\tvar x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,\n\t\ty1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height;\n\tvar l = droppable.offset.left, r = l + droppable.proportions.width,\n\t\tt = droppable.offset.top, b = t + droppable.proportions.height;\n\n\tswitch (toleranceMode) {\n\t\tcase 'fit':\n\t\t\treturn (l <= x1 && x2 <= r\n\t\t\t\t&& t <= y1 && y2 <= b);\n\t\t\tbreak;\n\t\tcase 'intersect':\n\t\t\treturn (l < x1 + (draggable.helperProportions.width / 2) // Right Half\n\t\t\t\t&& x2 - (draggable.helperProportions.width / 2) < r // Left Half\n\t\t\t\t&& t < y1 + (draggable.helperProportions.height / 2) // Bottom Half\n\t\t\t\t&& y2 - (draggable.helperProportions.height / 2) < b ); // Top Half\n\t\t\tbreak;\n\t\tcase 'pointer':\n\t\t\tvar draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left),\n\t\t\t\tdraggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top),\n\t\t\t\tisOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width);\n\t\t\treturn isOver;\n\t\t\tbreak;\n\t\tcase 'touch':\n\t\t\treturn (\n\t\t\t\t\t(y1 >= t && y1 <= b) ||\t// Top edge touching\n\t\t\t\t\t(y2 >= t && y2 <= b) ||\t// Bottom edge touching\n\t\t\t\t\t(y1 < t && y2 > b)\t\t// Surrounded vertically\n\t\t\t\t) && (\n\t\t\t\t\t(x1 >= l && x1 <= r) ||\t// Left edge touching\n\t\t\t\t\t(x2 >= l && x2 <= r) ||\t// Right edge touching\n\t\t\t\t\t(x1 < l && x2 > r)\t\t// Surrounded horizontally\n\t\t\t\t);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn false;\n\t\t\tbreak;\n\t\t}\n\n};\n\n/*\n\tThis manager tracks offsets of draggables and droppables\n*/\n$.ui.ddmanager = {\n\tcurrent: null,\n\tdroppables: { 'default': [] },\n\tprepareOffsets: function(t, event) {\n\n\t\tvar m = $.ui.ddmanager.droppables[t.options.scope] || [];\n\t\tvar type = event ? event.type : null; // workaround for #2317\n\t\tvar list = (t.currentItem || t.element).find(\":data(droppable)\").andSelf();\n\n\t\tdroppablesLoop: for (var i = 0; i < m.length; i++) {\n\n\t\t\tif(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) continue;\t//No disabled and non-accepted\n\t\t\tfor (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item\n\t\t\tm[i].visible = m[i].element.css(\"display\") != \"none\"; if(!m[i].visible) continue; \t\t\t\t\t\t\t\t\t//If the element is not visible, continue\n\n\t\t\tif(type == \"mousedown\") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables\n\n\t\t\tm[i].offset = m[i].element.offset();\n\t\t\tm[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };\n\n\t\t}\n\n\t},\n\tdrop: function(draggable, event) {\n\n\t\tvar dropped = false;\n\t\t$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {\n\n\t\t\tif(!this.options) return;\n\t\t\tif (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance))\n\t\t\t\tdropped = this._drop.call(this, event) || dropped;\n\n\t\t\tif (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {\n\t\t\t\tthis.isout = 1; this.isover = 0;\n\t\t\t\tthis._deactivate.call(this, event);\n\t\t\t}\n\n\t\t});\n\t\treturn dropped;\n\n\t},\n\tdragStart: function( draggable, event ) {\n\t\t//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)\n\t\tdraggable.element.parentsUntil( \"body\" ).bind( \"scroll.droppable\", function() {\n\t\t\tif( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t});\n\t},\n\tdrag: function(draggable, event) {\n\n\t\t//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.\n\t\tif(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event);\n\n\t\t//Run through all droppables and check their positions based on specific tolerance options\n\t\t$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {\n\n\t\t\tif(this.options.disabled || this.greedyChild || !this.visible) return;\n\t\t\tvar intersects = $.ui.intersect(draggable, this, this.options.tolerance);\n\n\t\t\tvar c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null);\n\t\t\tif(!c) return;\n\n\t\t\tvar parentInstance;\n\t\t\tif (this.options.greedy) {\n\t\t\t\tvar parent = this.element.parents(':data(droppable):eq(0)');\n\t\t\t\tif (parent.length) {\n\t\t\t\t\tparentInstance = $.data(parent[0], 'droppable');\n\t\t\t\t\tparentInstance.greedyChild = (c == 'isover' ? 1 : 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// we just moved into a greedy child\n\t\t\tif (parentInstance && c == 'isover') {\n\t\t\t\tparentInstance['isover'] = 0;\n\t\t\t\tparentInstance['isout'] = 1;\n\t\t\t\tparentInstance._out.call(parentInstance, event);\n\t\t\t}\n\n\t\t\tthis[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0;\n\t\t\tthis[c == \"isover\" ? \"_over\" : \"_out\"].call(this, event);\n\n\t\t\t// we just moved out of a greedy child\n\t\t\tif (parentInstance && c == 'isout') {\n\t\t\t\tparentInstance['isout'] = 0;\n\t\t\t\tparentInstance['isover'] = 1;\n\t\t\t\tparentInstance._over.call(parentInstance, event);\n\t\t\t}\n\t\t});\n\n\t},\n\tdragStop: function( draggable, event ) {\n\t\tdraggable.element.parentsUntil( \"body\" ).unbind( \"scroll.droppable\" );\n\t\t//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)\n\t\tif( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );\n\t}\n};\n\n\n","// this file was auto-generated by rake i18n:generate_js.\n// you probably shouldn't edit it directly\nimport mergeI18nTranslations from '@canvas/i18n/mergeI18nTranslations.js';\n\n// we use JSON.parse here instead of just loading it as a javascript object literal\n// because according to https://v8.dev/blog/cost-of-javascript-2019#json that is faster\nmergeI18nTranslations(JSON.parse(\"{\\\"ar\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"إظهار النص المقتبس\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"ca\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"mostra el text citat\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"cy\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"dangos testun wedi’i ddyfynnu\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"da\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"vis tekst i gåseøjne\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"da-x-k12\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"vis tekst i gåseøjne\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"de\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"zitierten Text zeigen\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"el\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"προβολή κειμένου που παρατίθεται\\\"}}},\\\"en\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"show quoted text\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"en-AU\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"show quoted text\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"en-CA\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"show quoted text\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"en-GB\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"show quoted text\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"es\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"mostrar texto citado\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"fa\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"نمایش متن نقل شده\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"fi\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"näytä lainattu teksti\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"fr\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"afficher le texte entre guillemets\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"fr-CA\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"afficher le texte entre guillemets\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"he\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"מציג ציטוט\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"ht\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"afiche tèks site\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"hu\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"idézett szöveg megjelenítése\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"hy\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"ցույց տալ մեջբերվող տեքստը\\\",\\\"word_separator\\\":\\\"-\\\"}}},\\\"is\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"Sýna ívitnaðan texta\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"it\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"mostra testo citato\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"ja\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"引用したテキストを表示\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"ko\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"인용된 텍스트 표시\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"mi\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"whakaatu kuputuhi faahiti\\\",\\\"word_separator\\\":\\\"-\\\"}}},\\\"nb\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"vis den merkede teksten\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"nb-x-k12\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"vis den merkede teksten\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"nl\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"geciteerde tekst tonen\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"nn\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"vis sitert tekst\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"pl\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"pokaż cytowany fragment tekstu\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"pt\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"exibir texto citado\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"pt-BR\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"exibir texto citado\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"ru\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"показать цитированный текст\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"sl\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"prikaži citirano besedilo\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"sv\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"visa citerad text\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"sv-x-k12\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"visa citerad text\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"tr\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"alıntılanan metni göster\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"uk\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"Показати цитований текст\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"zh-Hans\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"显示引用的文本\\\",\\\"word_separator\\\":\\\" \\\"}}},\\\"zh-Hant\\\":{\\\"lib\\\":{\\\"text_helper\\\":{\\\"ellipsis\\\":\\\"...\\\",\\\"quoted_text_toggle\\\":\\\"顯示引用的文字\\\",\\\"word_separator\\\":\\\" \\\"}}}}\"));\n","\n import I18n from '@canvas/i18n/i18nObj';\n \n import 'translations/lib.text_helper';\n import 'translations/_core';\n \n import 'translations/_core_en';\n\n export default I18n.scoped('lib.text_helper');\n ","#\n# Copyright (C) 2012 - present Instructure, Inc.\n#\n# This file is part of Canvas.\n#\n# Canvas is free software: you can redistribute it and/or modify it under\n# the terms of the GNU Affero General Public License as published by the Free\n# Software Foundation, version 3 of the License.\n#\n# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n# details.\n#\n# You should have received a copy of the GNU Affero General Public License along\n# with this program. If not, see .\n#\n\nimport $ from 'jquery'\nimport I18n from 'i18n!lib.text_helper'\nimport htmlEscape from 'html-escape'\n\nAUTO_LINKIFY_PLACEHOLDER = \"LINK-PLACEHOLDER\"\nAUTO_LINKIFY_REGEX = ///\n \\b\n ( # Capture 1: entire matched URL\n (?:\n https?:// # http or https protocol\n | # or\n www\\d{0,3}[.] # \"www.\", \"www1.\", \"www2.\" … \"www999.\"\n | # or\n [a-z0-9.\\-]+[.][a-z]{2,4}/ # looks like domain name followed by a slash\n )\n\n (?:\n [^\\s()<>]+ # Run of non-space, non-()<>\n | # or\n \\([^\\s()<>]*\\) # balanced parens, single level\n )+\n\n (?:\n \\([^\\s()<>]*\\) # balanced parens, single level\n | # or\n [^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’] # End with: not a space or one of these punct chars\n )\n ) | (\n LINK-PLACEHOLDER\n )\n///gi\n\nexport default th =\n quoteClump: (lines) ->\n \"\"\n\n formatMessage: (message) ->\n # replace any links with placeholders so we don't escape them\n links = []\n placeholderBlocks = []\n message = message.replace AUTO_LINKIFY_REGEX, (match, i) ->\n placeholderBlocks.push(if match == AUTO_LINKIFY_PLACEHOLDER\n AUTO_LINKIFY_PLACEHOLDER\n else\n link = match\n link = \"http://\" + link unless link[0..6] == 'http://' or link[0..7] == 'https://'\n links.push link\n \"#{htmlEscape(match)}\"\n )\n AUTO_LINKIFY_PLACEHOLDER\n\n # now escape html\n message = htmlEscape message\n\n # now put the links back in\n message = message.replace new RegExp(AUTO_LINKIFY_PLACEHOLDER, 'g'), (match, i) ->\n placeholderBlocks.shift()\n\n # replace newlines\n message = message.replace /\\n/g, '
\\n'\n\n # generate quoting clumps\n processedLines = []\n quoteBlock = []\n for line in message.split(\"\\n\")\n if line.match /^(>|>)/\n quoteBlock.push line\n else\n processedLines.push th.quoteClump(quoteBlock) if quoteBlock.length\n quoteBlock = []\n processedLines.push line\n processedLines.push th.quoteClump(quoteBlock) if quoteBlock.length\n message = processedLines.join \"\\n\"\n\n delimit: (number) ->\n # only process real numbers\n return String(number) if isNaN number\n\n # capture sign and then start working with the absolute value. don't\n # process infinities.\n sign = if number < 0 then '-' else ''\n abs = Math.abs number\n return String(number) if abs is Infinity\n\n # break out the integer portion and initialize the result to just the\n # decimal (if any)\n integer = Math.floor abs\n result = if abs == integer then '' else String(abs).replace(/^\\d+\\./, '.')\n\n # for each comma'd chunk, prepend to the result and remove from integer\n while integer >= 1000\n mod = String(integer).replace(/\\d+(\\d\\d\\d)$/, ',$1')\n integer = Math.floor integer / 1000\n result = mod + result\n\n # integer is now either in [1, 999], or equal to 0 iff number in (-1, 1).\n # prepend it with the sign\n sign + String(integer) + result\n\n truncateText: (string, options = {}) ->\n max = options.max ? 30\n ellipsis = I18n.t('ellipsis', '...')\n wordSeparator = I18n.t('word_separator', ' ')\n\n string = (string ? \"\").replace(/\\s+/g, wordSeparator).trim()\n return string if not string or string.length <= max\n\n truncateAt = 0\n while true\n pos = string.indexOf(wordSeparator, truncateAt + 1)\n break if pos < 0 || pos > max - ellipsis.length\n truncateAt = pos\n truncateAt or= max - ellipsis.length # first word > max, so we cut it\n\n string.substring(0, truncateAt) + ellipsis\n\n plainText: (message) ->\n # remove all html tags from the message returning only the text\n message.replace(/(<([^>]+)>)/ig, '');\n","/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 - present Instructure, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/**\n * ---\n * category: utilities/PropTypes\n * ---\n * Verify that either value is provided as a prop if as=\"input\", and children\n * if provided otherwise\n *\n * ```js\n * import { childrenOrValue } from '@instructure/ui-prop-types'\n *\n * class Foo extends Component {\n * static propTypes = {\n * children: childrenOrValue,\n * value: childrenOrValue\n * }\n * ...\n * ```\n */\nfunction childrenOrValue(props, propName, componentName) {\n if (props.as === 'input') {\n if (propName === 'children' && props.children || props.value == void 0) {\n return new Error(\"Prop `value` and not `children` must be supplied if `\".concat(componentName, \" as=\\\"input\\\"`\"));\n }\n } else {\n if (propName === 'value' && props.value != void 0) {\n return new Error(\"Prop `children` and not `value` must be supplied unless `\".concat(componentName, \" as=\\\"input\\\"`\"));\n } else if (!props.children) {\n return new Error(\"Prop `children` should be supplied unless `\".concat(componentName, \" as=\\\"input\\\"`.\"));\n }\n }\n\n return;\n}\n\nexport default childrenOrValue;\nexport { childrenOrValue };","/*\n * Copyright (C) 2011 - present Instructure, Inc.\n *\n * This file is part of Canvas.\n *\n * Canvas is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, version 3 of the License.\n *\n * Canvas is distributed in the hope that it will be useful, but WITHOUT ANY\n * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n * A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License along\n * with this program. If not, see .\n */\n\nimport $ from 'jquery'\nimport htmlEscape from 'html-escape'\nimport '@canvas/jquery/jquery.instructure_misc_helpers' /* replaceTags */\n\n// Fills the selected object(s) with data values as specified. Plaintext values should be specified in the\n// data: data used to fill template.\n// id: set the id attribute of the template object\n// textValues: a list of strings, which values should be plaintext\n// htmlValues: a list of strings, which values should be html\n// hrefValues: List of string. Searches for all anchor tags in the template\n// and globally replaces \"{{ value }}\" with data[value]. Useful for adding\n// new elements asynchronously, when you don't know what their URL will be\n// until they're created.\n$.fn.fillTemplateData = function(options) {\n if (this.length && options) {\n if (options.iterator) {\n // todo: replace .andSelf with .addBack when JQuery is upgraded.\n this.find('*')\n .andSelf()\n .each(function() {\n const $el = $(this)\n $.each(['name', 'id', 'class'], (i, attr) => {\n if ($el.attr(attr)) {\n $el.attr(attr, $el.attr(attr).replace(/-iterator-/, options.iterator))\n }\n })\n })\n }\n if (options.id) {\n this.attr('id', options.id)\n }\n let contentChange = false\n if (options.data) {\n for (var item in options.data) {\n if (options.except && $.inArray(item, options.except) != -1) {\n continue\n }\n if (options.data[item] && options.dataValues && $.inArray(item, options.dataValues) != -1) {\n this.data(item, options.data[item].toString())\n }\n const $found_all = this.find('.' + item)\n var avoid = options.avoid || ''\n $found_all.each(function() {\n const $found = $(this)\n if ($found.length > 0 && $found.closest(avoid).length === 0) {\n if (typeof options.data[item] === 'undefined' || options.data[item] === null) {\n options.data[item] = ''\n }\n if (options.htmlValues && $.inArray(item, options.htmlValues) != -1) {\n $found.html($.raw(options.data[item].toString()))\n if ($found.hasClass('user_content')) {\n contentChange = true\n $found.removeClass('enhanced')\n $found.data('unenhanced_content_html', options.data[item].toString())\n }\n } else if ($found[0].tagName.toUpperCase() == 'INPUT') {\n $found.val(options.data[item])\n } else {\n try {\n const str = options.data[item].toString()\n $found.html(htmlEscape(str))\n } catch (e) {}\n }\n }\n })\n }\n }\n if (options.hrefValues && options.data) {\n this.find('a,span[rel]').each(function() {\n let $obj = $(this),\n oldHref,\n oldRel,\n oldName\n for (const i in options.hrefValues) {\n if (!options.hrefValues.hasOwnProperty(i)) {\n continue\n }\n const name = options.hrefValues[i]\n if ((oldHref = $obj.attr('href'))) {\n const newHref = $.replaceTags(oldHref, name, encodeURIComponent(options.data[name]))\n const orig = $obj.text() === $obj.html() ? $obj.text() : null\n if (oldHref !== newHref) {\n $obj.attr('href', newHref)\n if (orig) {\n $obj.text(orig)\n }\n }\n }\n if ((oldRel = $obj.attr('rel'))) {\n $obj.attr('rel', $.replaceTags(oldRel, name, options.data[name]))\n }\n if ((oldName = $obj.attr('name'))) {\n $obj.attr('name', $.replaceTags(oldName, name, options.data[name]))\n }\n }\n })\n }\n if (contentChange) {\n $(document).triggerHandler('user_content_change')\n }\n }\n return this\n}\n\n$.fn.fillTemplateData.defaults = {htmlValues: null, hrefValues: null}\n\n// Reverse version of fillTemplateData. Lets you pull out the string versions of values held in divs, spans, etc.\n// Based on the usage of class names within an object to specify an object's sub-parts.\n$.fn.getTemplateData = function(options) {\n if (!this.length || !options) {\n return {}\n }\n var result = {},\n item,\n val\n if (options.textValues) {\n const _this = this\n options.textValues.forEach(item => {\n const $item = _this.find('.' + item.replace(/\\[/g, '\\\\[').replace(/\\]/g, '\\\\]') + ':first')\n val = $.trim($item.text())\n if ($item.html() === ' ') {\n val = ''\n }\n if (val.length === 1 && val.charCodeAt(0) === 160) {\n val = ''\n }\n result[item] = val\n })\n }\n if (options.dataValues) {\n for (item in options.dataValues) {\n var val = this.data(options.dataValues[item])\n if (val) {\n result[options.dataValues[item]] = val\n }\n }\n }\n if (options.htmlValues) {\n for (item in options.htmlValues) {\n const $elem = this.find(\n '.' + options.htmlValues[item].replace(/\\[/g, '\\\\[').replace(/\\]/g, '\\\\]') + ':first'\n )\n val = null\n if ($elem.hasClass('user_content') && $elem.data('unenhanced_content_html')) {\n val = $elem.data('unenhanced_content_html')\n } else {\n val = $.trim($elem.html())\n }\n result[options.htmlValues[item]] = val\n }\n }\n return result\n}\n\n$.fn.getTemplateValue = function(value, options) {\n const opts = $.extend({}, options, {textValues: [value]})\n return this.getTemplateData(opts)[value]\n}\n","/*\n * Copyright (C) 2011 - present Instructure, Inc.\n *\n * This file is part of Canvas.\n *\n * Canvas is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, version 3 of the License.\n *\n * Canvas is distributed in the hope that it will be useful, but WITHOUT ANY\n * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n * A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License along\n * with this program. If not, see .\n */\n\n// xsslint jqueryObject.identifier tree\nimport $ from 'jquery'\nimport _ from 'underscore'\nimport htmlEscape from 'html-escape'\nimport 'jqueryui/draggable'\nimport 'jqueryui/droppable'\n\n$.fn.instTree = function(options) {\n return $(this).each(function() {\n let binded = false\n let tree = $(this)\n const it = this\n let ddover = null\n\n it.options = {\n autoclose: true,\n overrideEvents: false,\n multi: true,\n dragdrop: true,\n onClick: false,\n onDblClick: false,\n onExpand: false,\n onCollapse: false,\n onAddNode: false,\n onEditNode: false,\n onDeleteNode: false,\n onDrag: false,\n onDrop: false\n }\n it.opts = $.extend({}, it.options, options)\n\n $.fn.instTree.InitInstTree = function(obj) {\n tree = $(obj)\n\n const $sep = '
  • '\n\n tree\n .find('li:not(.separator)')\n .filter(function() {\n return !(\n $(this)\n .prev('li.separator')\n .get(0) ||\n $(this)\n .parents('ul.non-instTree')\n .get(0)\n )\n })\n .each(function() {\n $(this).before($sep)\n })\n\n tree\n .find('li > span')\n .not('.sign')\n .not('.clr')\n .addClass('text')\n .attr('unselectable', 'on')\n\n tree\n .find('li:not(.separator)')\n .filter(function() {\n return !$(this)\n .parents('ul.non-instTree')\n .get(0)\n })\n .filter(':has(ul)')\n .addClass('node')\n .end()\n .filter(':not(.node)')\n .addClass('leaf')\n\n it.IeSetStyles()\n\n it.Clean()\n\n it.AddSigns()\n\n if (!binded) {\n it.BindEvents(obj)\n }\n\n // dragdrop\n if (it.opts.dragdrop) {\n it.CancelDragDrop(obj)\n it.InitDragDrop(obj)\n } // if (it.opts.dragdrop)\n } // InitInstTree\n it.InitDragDrop = function(obj) {\n tree = $(obj)\n\n tree.find('span.text').draggable({\n cursor: $.browser.msie ? 'default' : 'move',\n distance: 3,\n helper() {\n return $('
    ' + $(this).html() + '
    ')\n },\n appendTo: tree\n })\n\n tree.find('li.separator').droppable({\n accept: 'span.text',\n hoverClass: 'dd-hover'\n })\n\n tree.find('span.text').bind('dragstart', function(event, ui) {\n tree = $(this).parents('ul.instTree:first')\n\n const li = $(this).parent('li')\n const dd = $('div#instTree-drag')\n\n if ($.browser.msie) {\n tree.find('li.separator').removeClass('dd-hover')\n }\n\n if ($.browser.opera) {\n dd.css('margin-top', '10px')\n }\n\n if (li.is('.leaf')) {\n dd.addClass('leaf')\n\n if ($.browser.msie) {\n dd.css(\n 'background',\n '#C3E1FF url(' + it.opts.imgFolder + 'leaf-drag.gif) left 3px no-repeat'\n )\n }\n } // if (li.is('.leaf'))\n else if (li.is('.node')) {\n dd.addClass('node')\n }\n\n li.prev('li.separator')\n .addClass('alt')\n .end()\n .addClass('alt')\n\n if (typeof it.opts.onDrag === 'function') {\n it.opts.onDrag(event, li)\n }\n })\n\n tree.find('li.separator').bind('dropover', function(event, ui) {\n ddover = $(this)\n })\n\n tree.find('li.separator').bind('dropout', (event, ui) => {\n ddover = null\n })\n\n tree.find('span.text').bind('dragstop', (event, ui) => {\n let lvlok = true\n\n if (ddover) {\n var ali = tree.find('li.alt:not(.separator):eq(0)')\n const hli = ddover.parents('li.node:eq(0)')\n\n if (ali.is('.node') && hli.is('.fixedLevel')) {\n lvlok = false\n }\n } // if (ddover)\n if (ddover && lvlok) {\n ddover.before(\n tree\n .find('li.alt')\n .remove()\n .removeClass('alt')\n )\n\n ddover = null\n\n if (typeof it.opts.onDrop === 'function') {\n it.opts.onDrop(event, ali)\n }\n\n $.fn.instTree.InitInstTree(obj)\n } // if (ddover)\n else {\n tree.find('li.alt').removeClass('alt')\n }\n })\n } // InitDragDrop\n it.CancelDragDrop = function(obj) {\n tree = $(obj)\n\n tree.find('span.text').draggable('destroy')\n tree.find('li.separator').droppable('destroy')\n tree.find('li.separator').unbind()\n tree.find('span.text').unbind()\n }\n\n $.fn.instTree.AddNode = function(obj, type) {\n tree = $(obj)\n\n const activeElement = tree.find('span.active').get(0)\n\n if (activeElement) {\n const li = $(activeElement).parents('li:first')\n const lin = $(activeElement).parents('li.node:first')\n\n if (!lin.is('.fixedLevel') || type != 'node') {\n // xsslint safeString.identifier ncont cn\n const cn = type == 'leaf' ? '' : ' class=\"node\"'\n\n const sep = '
  • '\n const nli =\n ' '\n const ncont = sep + nli\n\n let ok = false\n let node, childul, iprnt\n\n if (li.is('.leaf')) {\n li.after(ncont)\n\n node = li.nextAll('li:not(.separator):first')\n\n iprnt = li.parent()\n\n ok = true\n } // if (li.is('.leaf'))\n else if (li.is('.node')) {\n childul = li.children('ul').get(0)\n\n if (childul) {\n $(childul).append(ncont)\n\n node = $(childul).children('li:not(.separator):last')\n } // if (childul)\n else {\n li.append('
      ' + ncont + '
    ')\n\n childul = li.children('ul').get(0)\n\n node = $(childul).children('li:not(.separator):last')\n } // else\n it.ExpandNode(obj, li)\n\n iprnt = li\n\n ok = true\n } // else if ( ...\n if (ok) {\n $(activeElement).removeClass('active')\n\n iprnt\n .find('input:text')\n .focus()\n .select()\n .blur(function() {\n it.SaveInput(obj, $(this))\n })\n } // if (ok)\n $.fn.instTree.InitInstTree(obj)\n\n if (typeof it.opts.onAddNode === 'function') {\n it.opts.onAddNode(node)\n }\n } // if ((!li.is('.fixedLevel')) || (type != 'node'))\n } // if (activeElement)\n } // AddNode\n $.fn.instTree.EditNode = function(obj) {\n tree = $(obj)\n const activeElement = tree.find('span.active').get(0)\n if (activeElement) {\n const li = $(activeElement).parents('li:first')\n\n $(activeElement).replaceWith(\n ' '\n )\n\n li.find('input:text')\n .focus()\n .select()\n .blur(function() {\n it.SaveInput(obj, $(this))\n })\n\n if (typeof it.opts.onEditNode === 'function') {\n it.opts.onEditNode(li)\n }\n }\n // if (activeElement)\n } // EditNode\n $.fn.instTree.DeleteNode = function(obj) {\n tree = $(obj)\n\n const activeElement = tree.find('span.active').get(0)\n\n if (activeElement) {\n const li = $(activeElement).parents('li:first')\n const prnt = li.parents('li.node:first')\n\n li.prev('li.separator')\n .remove()\n .end()\n .remove()\n\n $.fn.instTree.InitInstTree(obj)\n\n if (typeof it.opts.onDeleteNode === 'function') {\n it.opts.onDeleteNode(li, prnt)\n }\n } // if (activeElement)\n } // DeleteNode\n it.SaveInput = function(obj, input) {\n input.prev('span.text').remove()\n\n const val = $.trim(input.get(0).value) !== '' ? input.get(0).value : '_____'\n\n input.replaceWith('' + htmlEscape(val) + '')\n\n $.fn.instTree.InitInstTree(obj)\n } // SaveInput\n it.IeSetStyles = function() {\n if ($.browser.msie) {\n tree.find('li.node:not(.open) > ul').hide()\n tree.find('li.node.open > ul').css('margin-bottom', '1px')\n }\n } // IeSetStyles\n it.Clean = function() {\n tree.find('li:not(.separator)').each(function() {\n $(this).removeClass('last')\n\n if (!$(this).next('li').length || $(this).find('ul').length) {\n $(this).addClass('last')\n }\n })\n } // Clean\n it.AddSigns = function() {\n tree.find('li.node').each(function() {\n if ($(this).hasClass('open')) {\n $(this)\n .find('span.sign')\n .remove()\n .end()\n .append('')\n } else {\n $(this)\n .find('span.sign')\n .remove()\n .end()\n .append('')\n }\n })\n } // AddSigns\n it.BindEvents = function(obj) {\n tree.on('keydown', function(e) {\n const $currentSelected = tree.find('[aria-selected=\"true\"]')\n const $fileListContainer = $('#file_list_container')\n\n switch (e.which) {\n case 38: // up\n e.preventDefault()\n e.stopPropagation()\n\n var $upNode = it.FindNode($currentSelected, 'up')\n it.SelectNode($upNode)\n $fileListContainer.scrollTop(it.FileScrollOffset($upNode, $fileListContainer))\n\n break\n case 40: // down\n e.preventDefault()\n e.stopPropagation()\n\n var $downNode = it.FindNode($currentSelected, 'down')\n it.SelectNode($downNode)\n $fileListContainer.scrollTop(it.FileScrollOffset($downNode, $fileListContainer))\n\n break\n case 37: // left\n e.preventDefault()\n e.stopPropagation()\n var expanded = $currentSelected.attr('aria-expanded')\n\n if ($currentSelected.hasClass('node') && expanded === 'true') {\n it.CollapseNode($currentSelected)\n } else if (\n typeof expanded === 'undefined' ||\n expanded === false ||\n expanded === 'false'\n ) {\n const parentNode = $currentSelected.parents('.node').eq(0)\n it.SelectNode(parentNode)\n $fileListContainer.scrollTop(it.FileScrollOffset(parentNode, $fileListContainer))\n }\n\n break\n case 39: // right\n e.preventDefault()\n e.stopPropagation()\n var expanded = $currentSelected.attr('aria-expanded')\n\n if ($currentSelected.hasClass('node') && expanded !== 'true') {\n it.ExpandNode(obj, $currentSelected)\n } else if (expanded === 'true') {\n // if its something that can be expand\n var $downNode = it.FindNode($currentSelected, 'down')\n it.SelectNode($downNode)\n $fileListContainer.scrollTop(it.FileScrollOffset($downNode, $fileListContainer))\n }\n\n break\n case 13: // enter this allows for an onEnter function\n e.preventDefault()\n e.stopPropagation()\n var node = $currentSelected\n\n if (typeof it.opts.onEnter === 'function') {\n it.opts.onEnter.call(this, e, node)\n }\n\n break\n case 35: // home button\n e.preventDefault()\n e.stopPropagation()\n\n var $treeItems = $('[role=\"treeitem\"]:visible')\n var $lastItem = $treeItems.last()\n it.SelectNode($lastItem)\n $fileListContainer.scrollTop(it.FileScrollOffset($lastItem, $fileListContainer))\n\n break\n case 36: // home button\n e.preventDefault()\n e.stopPropagation()\n\n var $treeItems = $('[role=\"treeitem\"]:visible')\n var $firstItem = $treeItems.first()\n it.SelectNode($firstItem)\n $fileListContainer.scrollTop(it.FileScrollOffset($firstItem, $fileListContainer))\n\n break\n }\n })\n\n tree.click(function(e) {\n const tree = $(this).closest('.instTree')\n const clicked = $(e.target)\n let node\n\n if (clicked.is('span.sign')) {\n node = clicked.parents('li:eq(0)')\n it.ToggleNode(obj, node)\n } else if (clicked.is('span.text')) {\n node = clicked.closest('li')\n\n if (typeof it.opts.onClick === 'function') {\n if (!it.opts.overrideEvents) {\n if (!it.opts.multi || !e.ctrlKey) {\n tree\n .find('.active')\n .removeClass('active')\n .end()\n .find('.active-leaf')\n .removeClass('active-leaf')\n .end()\n .find('.active-node')\n .removeClass('active-node')\n }\n clicked.addClass('active')\n if (node.hasClass('leaf')) {\n node.addClass('active-leaf')\n } else {\n node.addClass('active-node')\n }\n }\n it.opts.onClick.call(node, e, node)\n } else {\n if (!it.opts.multi || !e.ctrlKey) {\n tree\n .find('.active')\n .removeClass('active')\n .end()\n .find('.active-leaf')\n .removeClass('active-leaf')\n .end()\n .find('.active-node')\n .removeClass('active-node')\n }\n clicked.addClass('active')\n if (node.hasClass('leaf')) {\n node.addClass('active-leaf')\n } else {\n node.addClass('active-node')\n }\n }\n }\n })\n\n tree.dblclick(e => {\n const clicked = $(e.target)\n\n if (clicked.is('span.text')) {\n const node = clicked.parents('li:eq(0)')\n\n if (typeof it.opts.onDblClick === 'function') {\n if (!it.opts.overrideEvents && node.is('.node')) {\n it.ToggleNode(obj, node)\n }\n it.opts.onDblClick.call(node, e, node)\n } else if (node.is('.node')) {\n it.ToggleNode(obj, node)\n }\n } // if (clicked.is('span.text'))\n })\n\n binded = true\n } // BindEvents\n it.ToggleNode = function(obj, node) {\n if (node.hasClass('open')) {\n it.CollapseNode(node)\n } else {\n it.ExpandNode(obj, node)\n }\n\n it.Clean()\n } // ToggleNode\n it.ExpandNode = function(obj, node) {\n node.addClass('open')\n node.attr('aria-expanded', true)\n\n if (it.opts.autoclose) {\n node.siblings('.open').each(function() {\n it.CollapseNode($(this))\n })\n }\n // if (opts.autoclose)\n if ($.browser.msie) {\n node\n .children('ul')\n .show()\n .css({\n 'margin-bottom': '1px',\n visibility: 'visible'\n })\n\n node\n .children('ul')\n .find('li.node:not(.open) > ul')\n .each(function() {\n $(this).css('visibility', 'hidden')\n })\n } // if ($.browser.msie)\n const sign = node.find('span.sign:last')\n\n sign.removeClass('plus').addClass('minus')\n\n if (it.opts.multi) {\n $.fn.instTree.InitInstTree(obj)\n }\n\n if (typeof it.opts.onExpand === 'function') {\n it.opts.onExpand(node)\n }\n } // ExpandNode\n\n it.CollapseNode = function(node) {\n node.removeClass('open')\n node.attr('aria-expanded', false)\n\n if ($.browser.msie) {\n node.children('ul').hide()\n }\n\n const sign = node.find('span.sign:last')\n\n sign.removeClass('minus').addClass('plus')\n\n if (typeof it.opts.onCollapse === 'function') {\n it.opts.onCollapse(node)\n }\n } // CollapseNode\n\n // This function add's all of the accessiblity attributes\n // to a node to qualify it as 'selected'. This means aria-selected,\n // activedecendant and any other tags that might need to be added.\n\n it.SelectNode = function($node) {\n if ($node.length) {\n tree.attr('aria-activedescendant', $node.attr('id'))\n tree.find('[aria-selected=\"true\"]').attr('aria-selected', 'false')\n $node.attr('aria-selected', 'true')\n }\n } // SelectNode\n\n // This returns a next or previous node in a tree. For instance, given\n // node 1, 2, 3 if you are on node 1 and want to move down to the next\n // node it would return node 2. (In the file system of course).\n //\n // Accepts 2 arguments -> jQuery Object | \"up\" or \"down\" (defaults to down)\n // Returns jQuery Node\n\n it.FindNode = function($currentSelected, direction) {\n const $treeItems = $('[role=\"treeitem\"]:visible')\n const currentIndex = $treeItems.index($currentSelected)\n let newIndex = currentIndex\n\n direction == 'up' ? newIndex-- : newIndex++ // defaults to ++ or a down direction\n const node = newIndex >= 0 ? $treeItems.get(newIndex) : $treeItems.get(currentIndex) // ensure you don't return a negitive index\n const $node = $(node).data('indexPosition', newIndex)\n return $node\n } // FindNode\n\n // Calculates the offset that should be used to keep the files tab scrolled\n // in the right position. Using the native \"offset\" properties was inconsistent\n // so we are calculating the position by adding the heights of div and scrolling\n // based on that.\n //\n // Accepts 2 argument -> jQuery Object (file/folder node) and jQuery Object its container\n // Returns Integer which is the offset to use for scrolling to the correct position\n\n it.FileScrollOffset = function($item, $fileListContainer) {\n const index = $item.data('indexPosition')\n\n const leafHight =\n $fileListContainer\n .find('.leaf')\n .first()\n .height() || 20 // defaults to 20 px\n const seperatorHeight =\n $item\n .siblings('.separator')\n .first()\n .height() || 2 // defaults to 2 px\n const seperatorOffset = seperatorHeight * index\n const nodeOffset = leafHight * index\n const containerOffset = $fileListContainer.height() / 2\n\n return nodeOffset + seperatorOffset - containerOffset\n } // FileScrollOffset\n\n if ($(this).is('ul')) {\n tree = $(this)\n tree.addClass('instTree')\n $.fn.instTree.InitInstTree(it)\n } // if ($(this).is('ul'))\n })\n}\n","// this file was auto-generated by rake i18n:generate_js.\n// you probably shouldn't edit it directly\nimport mergeI18nTranslations from '@canvas/i18n/mergeI18nTranslations.js';\n\n// we use JSON.parse here instead of just loading it as a javascript object literal\n// because according to https://v8.dev/blog/cost-of-javascript-2019#json that is faster\nmergeI18nTranslations(JSON.parse(\"{\\\"ar\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"إلغاء\\\",\\\"delete\\\":\\\"حذف\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"هل ترغب بالتأكيد في حذف هذا؟\\\"}}},\\\"ca\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Cancel·la\\\",\\\"delete\\\":\\\"Suprimeix\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Segur que ho voleu suprimir?\\\"}}},\\\"cy\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Canslo\\\",\\\"delete\\\":\\\"Dileu\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Ydych chi’n siŵr eich bod am ddileu hyn?\\\"}}},\\\"da\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Annullér\\\",\\\"delete\\\":\\\"Slet\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Er du sikker på, at du vil slette dette?\\\"}}},\\\"da-x-k12\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Annullér\\\",\\\"delete\\\":\\\"Slet\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Er du sikker på, at du vil slette dette?\\\"}}},\\\"de\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Abbrechen\\\",\\\"delete\\\":\\\"Löschen\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Möchten Sie dies wirklich löschen?\\\"}}},\\\"el\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Ακύρωση\\\",\\\"delete\\\":\\\"Διαγραφή\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Είστε σίγουρος/η ότι επιθυμείτε να το διαγράψετε;\\\"}}},\\\"en\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Cancel\\\",\\\"delete\\\":\\\"Delete\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Are you sure you want to delete this?\\\"}}},\\\"en-AU\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Cancel\\\",\\\"delete\\\":\\\"Delete\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Are you sure you want to delete this?\\\"}}},\\\"en-CA\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Cancel\\\",\\\"delete\\\":\\\"Delete\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Are you sure you want to delete this?\\\"}}},\\\"en-GB\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Cancel\\\",\\\"delete\\\":\\\"Delete\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Are you sure you want to delete this?\\\"}}},\\\"es\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Cancelar\\\",\\\"delete\\\":\\\"Eliminar\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"¿Seguro que desea eliminarlo?\\\"}}},\\\"fa\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"لغو\\\",\\\"delete\\\":\\\"حذف\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"مطمئنید که می خواهید این مورد حذف شود؟\\\"}}},\\\"fi\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Peruuta\\\",\\\"delete\\\":\\\"Poista\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Haluatko varmasti poistaa tämän?\\\"}}},\\\"fr\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Annuler\\\",\\\"delete\\\":\\\"Supprimer\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Voulez-vous vraiment supprimer cet élément ?\\\"}}},\\\"fr-CA\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Annuler\\\",\\\"delete\\\":\\\"Supprimer\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Voulez-vous vraiment supprimer cet élément?\\\"}}},\\\"he\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"ביטול\\\",\\\"delete\\\":\\\"ביטול\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"בטוח/ה שרוצה לבטל זאת?\\\"}}},\\\"ht\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Anile\\\",\\\"delete\\\":\\\"Efase\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Ou kwè vrèman ou vle efase sa a?\\\"}}},\\\"hu\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Mégse\\\",\\\"delete\\\":\\\"Törlés\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Biztos benne, hogy törli ezt?\\\"}}},\\\"hy\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Չեղյալ համարել\\\",\\\"delete\\\":\\\"Ջնջել\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Դուք իսկապե՞ս ցանկանում եք ջնջել սա:\\\"}}},\\\"is\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Hætta við\\\",\\\"delete\\\":\\\"Eyða\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Viltu örugglega eyða þessu?\\\"}}},\\\"it\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Annulla\\\",\\\"delete\\\":\\\"Elimina\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Vuoi eliminare questo?\\\"}}},\\\"ja\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"キャンセル\\\",\\\"delete\\\":\\\"削除\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"これを削除してもよろしいですか?\\\"}}},\\\"ko\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"취소\\\",\\\"delete\\\":\\\"삭제\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"삭제하시겠습니까?\\\"}}},\\\"mi\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Whakakore\\\",\\\"delete\\\":\\\"Muku\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"E tino hiahia ana koe ki te muku i tēnei?\\\"}}},\\\"nb\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Avbryt\\\",\\\"delete\\\":\\\"Slett\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Er du sikker på at du ønsker å slette dette?\\\"}}},\\\"nb-x-k12\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Avbryt\\\",\\\"delete\\\":\\\"Slett\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Er du sikker på at du ønsker å slette dette?\\\"}}},\\\"nl\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Annuleren\\\",\\\"delete\\\":\\\"Verwijderen\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Weet je zeker dat je dit wilt verwijderen?\\\"}}},\\\"nn\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Avbryt\\\",\\\"delete\\\":\\\"Slett\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Er du sikker på at du vil slette dette?\\\"}}},\\\"pl\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Anuluj\\\",\\\"delete\\\":\\\"Usuń\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Czy na pewno chcesz usunąć ten element?\\\"}}},\\\"pt\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Cancelar\\\",\\\"delete\\\":\\\"Eliminar\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Tem certeza de que deseja excluir isto?\\\"}}},\\\"pt-BR\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Cancelar\\\",\\\"delete\\\":\\\"Excluir\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Tem certeza que deseja excluir isto?\\\"}}},\\\"ru\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Отменить\\\",\\\"delete\\\":\\\"Удалить\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Действительно хотите удалить?\\\"}}},\\\"sl\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Prekliči\\\",\\\"delete\\\":\\\"Odstrani\\\"}},\\\"sv\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Avbryt\\\",\\\"delete\\\":\\\"Ta bort\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Vill du verkligen radera det här?\\\"}}},\\\"sv-x-k12\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Avbryt\\\",\\\"delete\\\":\\\"Ta bort\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Vill du verkligen radera det här?\\\"}}},\\\"tr\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"İptal\\\",\\\"delete\\\":\\\"Sil\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"Bunu silmek istediğinize emin misiniz?\\\"}}},\\\"uk\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"Скасувати\\\",\\\"delete\\\":\\\"Видалити\\\"}},\\\"zh-Hans\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"取消\\\",\\\"delete\\\":\\\"删除\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"是否确定要删除它?\\\"}}},\\\"zh-Hant\\\":{\\\"buttons\\\":{\\\"cancel\\\":\\\"取消\\\",\\\"delete\\\":\\\"刪除\\\"},\\\"instructure_misc_plugins\\\":{\\\"confirms\\\":{\\\"default_delete_thing\\\":\\\"您是否確定要刪除?\\\"}}}}\"));\n","\n import I18n from '@canvas/i18n/i18nObj';\n \n import 'translations/instructure_misc_plugins';\n import 'translations/_core';\n \n import 'translations/_core_en';\n\n export default I18n.scoped('instructure_misc_plugins');\n ","/*\n * Copyright (C) 2011 - present Instructure, Inc.\n *\n * This file is part of Canvas.\n *\n * Canvas is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, version 3 of the License.\n *\n * Canvas is distributed in the hope that it will be useful, but WITHOUT ANY\n * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n * A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License along\n * with this program. If not, see .\n */\nimport I18n from 'i18n!instructure_misc_plugins'\nimport $ from 'jquery'\nimport htmlEscape from 'html-escape'\nimport authenticity_token from '@canvas/authenticity-token'\nimport './jquery.ajaxJSON'\nimport 'jqueryui/dialog'\nimport 'jquery-scroll-to-visible'\nimport 'jquery-scroll-to-visible/jquery.scrollTo'\n\n$.fn.setOptions = function(prompt, options) {\n let result = prompt ? \"' : ''\n\n if (options == null) {\n options = []\n }\n\n options.forEach(opt => {\n const optHtml = htmlEscape(opt)\n result += ''\n })\n\n return this.html($.raw(result))\n}\n\n// this function is to prevent you from doing all kinds of expesive operations on a\n// jquery object that doesn't actually have any elements in it\n// it is similar and inspired by http://www.slideshare.net/paul.irish/perfcompression (slide #42)\n// to use it do something like:\n// $(\"a .bunch #of .nodes\").ifExists(function(orignalQuery){\n// // 'this' points to the original jquery object (in this case, $(\"a .bunch #of .nodes\") );\n// // orignalQuery is the same as 'this';\n// this.slideUp().dialog().show();\n// });\n$.fn.ifExists = function(func) {\n this.length && func.call(this, this)\n return this\n}\n\n// Returns the width of the browser's scroll bars.\n$.fn.scrollbarWidth = function() {\n const $div = $(\n '
    '\n ).appendTo(this),\n $innerDiv = $div.find('div')\n // Append our div, do our calculation and then remove it\n const w1 = $innerDiv.innerWidth()\n $div.css('overflow-y', 'scroll')\n const w2 = $innerDiv.innerWidth()\n $div.remove()\n return w1 - w2\n}\n\n// Simple animation for dimming an element's opacity\n$.fn.dim = function(speed) {\n return this.animate({opacity: 0.4}, speed)\n}\n\n$.fn.undim = function(speed) {\n return this.animate({opacity: 1.0}, speed)\n}\n\n// Helper for deleting objects from the DOM and db.\n// url: URL to pass DELETE message. If none provided,\n// behaves as if the request were a success. Useful for testing.\n// message: Confirmation message\n// cancelled: Function to handle cancel.\n// confirmed: Function to handle confirm, before submit.\n// success: What to do on success. If none provided, fades\n// out the element and removes it from the DOM.\n// error: Error.\n// dialog: If present, do a jquery.ui.dialog instead of a confirm(). If an\n// object, it will be merged into the dialog options.\n$.fn.confirmDelete = function(options) {\n var options = $.extend({}, $.fn.confirmDelete.defaults, options)\n const $object = this\n let $dialog = null\n let result = true\n options.noMessage = options.noMessage || options.no_message\n const onContinue = function() {\n if (!result) {\n if (options.cancelled && $.isFunction(options.cancelled)) {\n options.cancelled.call($object)\n }\n return\n }\n if (!options.confirmed) {\n options.confirmed = function() {\n $object.dim()\n }\n }\n options.confirmed.call($object)\n if (options.url) {\n if (!options.success) {\n options.success = function(data) {\n $object.fadeOut('slow', () => {\n $object.remove()\n })\n }\n }\n const data = options.prepareData ? options.prepareData.call($object, $dialog) : {}\n data.authenticity_token = authenticity_token()\n $.ajaxJSON(\n options.url,\n 'DELETE',\n data,\n data => {\n options.success.call($object, data)\n },\n (data, request, status, error) => {\n if (options.error && $.isFunction(options.error)) {\n options.error.call($object, data, request, status, error)\n } else {\n $.ajaxJSON.unhandledXHRs.push(request)\n }\n }\n )\n } else {\n if (!options.success) {\n options.success = function() {\n $object.fadeOut('slow', () => {\n $object.remove()\n })\n }\n }\n options.success.call($object)\n }\n }\n if (options.message && !options.noMessage && !$.skipConfirmations) {\n if (options.dialog) {\n result = false\n const dialog_options = typeof options.dialog === 'object' ? options.dialog : {}\n const confirmation_class = options.url.includes('assignments') ? 'btn-danger' : 'btn-primary'\n $dialog = $(options.message).dialog(\n $.extend(\n {},\n {\n modal: true,\n close: onContinue,\n buttons: [\n {\n text: I18n.t('#buttons.cancel', 'Cancel'),\n click() {\n $(this).dialog('close')\n } // ; onContinue();\n },\n {\n text: I18n.t('#buttons.delete', 'Delete'),\n class: confirmation_class,\n click() {\n result = true\n $(this).dialog('close')\n }\n }\n ]\n },\n dialog_options\n )\n )\n return\n } else {\n result = confirm(options.message)\n }\n }\n onContinue()\n}\n$.fn.confirmDelete.defaults = {\n get message() {\n return I18n.t('confirms.default_delete_thing', 'Are you sure you want to delete this?')\n }\n}\n\n// Watches the given element's location.href for any changes\n// to the fragment (\"#...\") and calls the provided function\n// when there are any.\n// $(document).fragmentChange(function(event, hash) { alert(hash); });\n$.fn.fragmentChange = function(fn) {\n if (fn && fn !== true) {\n const query = (window.location.search || '').replace(/^\\?/, '').split('&')\n // The URL can hard-code a hash regardless of what's\n // actually shown in the hash by specifying a query\n // parameter, hash=some_hash\n let query_hash = null\n for (var i = 0; i < query.length; i++) {\n const item = query[i]\n if (item && item.indexOf('hash=') === 0) {\n query_hash = '#' + item.substring(5)\n }\n }\n this.bind('document_fragment_change', fn)\n const $doc = this\n let found = false\n // Can only be used on the root document,\n // will not work on an iframe, for example.\n for (var i = 0; i < $._checkFragments.fragmentList.length; i++) {\n const obj = $._checkFragments.fragmentList[i]\n if (obj.doc[0] == $doc[0]) {\n found = true\n }\n }\n if (!found) {\n $._checkFragments.fragmentList.push({\n doc: $doc,\n fragment: ''\n })\n }\n $(window).bind('hashchange', $._checkFragments)\n setTimeout(() => {\n if (query_hash && query_hash.length > 0) {\n $doc.triggerHandler('document_fragment_change', query_hash)\n } else if ($doc && $doc[0] && $doc[0].location && $doc[0].location.hash.length > 0) {\n $doc.triggerHandler('document_fragment_change', $doc[0].location.hash)\n }\n }, 500)\n } else {\n this.triggerHandler('document_fragment_change', this[0].location.hash)\n }\n return this\n}\n$._checkFragments = function() {\n const list = $._checkFragments.fragmentList\n for (let idx = 0; idx < list.length; idx++) {\n const obj = list[idx]\n const $doc = obj.doc\n if ($doc[0].location.hash != obj.fragment) {\n $doc.triggerHandler('document_fragment_change', $doc[0].location.hash)\n obj.fragment = $doc[0].location.hash\n $._checkFragments.fragmentList[idx] = obj\n }\n }\n}\n$._checkFragments.fragmentList = []\n// Triggers a click only if the anchor tag isn't disabled.\n$.fn.clickLink = function() {\n const $obj = this.eq(0)\n if (!$obj.hasClass('disabled_link')) {\n $obj.click()\n }\n}\n\n// jQuery supposedly has this built-in, but I haven't\n// had much success with it.\n$.fn.showIf = function(bool) {\n if ($.isFunction(bool)) {\n return this.each(function(index) {\n $(this).showIf(bool.call(this))\n })\n }\n if (bool) {\n this.show()\n } else {\n this.hide()\n }\n return this\n}\n\n$.fn.disableIf = function(bool) {\n if ($.isFunction(bool)) {\n bool = bool.call(this)\n }\n this.prop('disabled', !!bool)\n return this\n}\n\n$.fn.indicate = function(options) {\n options = options || {}\n let $indicator\n if (options == 'remove') {\n $indicator = this.data('indicator')\n if ($indicator) {\n $indicator.remove()\n }\n return\n }\n $('.indicator_box').remove()\n let offset = this.offset()\n if (options && options.offset) {\n offset = options.offset\n }\n const width = this.width()\n const height = this.height()\n const zIndex = (options.container || this).zIndex()\n $indicator = $(document.createElement('div'))\n $indicator.css({\n width: width + 6,\n height: height + 6,\n top: offset.top - 3,\n left: offset.left - 3,\n zIndex: zIndex + 1,\n position: 'absolute',\n display: 'block',\n '-moz-border-radius': 5,\n opacity: 0.8,\n border: '2px solid #870',\n backgroundColor: '#fd0'\n })\n $indicator.addClass('indicator_box')\n $indicator.mouseover(function() {\n $(this)\n .stop()\n .fadeOut('fast', function() {\n $(this).remove()\n })\n })\n if (this.data('indicator')) {\n this.indicate('remove')\n }\n this.data('indicator', $indicator)\n $('body').append($indicator)\n if (options && options.singleFlash) {\n $indicator\n .hide()\n .fadeIn()\n .animate({opacity: 0.8}, 500)\n .fadeOut('slow', function() {\n $(this).remove()\n })\n } else {\n $indicator\n .hide()\n .fadeIn()\n .animate({opacity: 0.8}, 500)\n .fadeOut('slow')\n .fadeIn('slow')\n .animate({opacity: 0.8}, 2500)\n .fadeOut('slow', function() {\n $(this).remove()\n })\n }\n if (options && options.scroll) {\n $('html,body').scrollToVisible($indicator)\n }\n}\n\n$.fn.hasScrollbar = function() {\n return this.length && this[0].clientHeight < this[0].scrollHeight\n}\n\n$.fn.log = function(msg) {\n console.log('%s: %o', msg, this)\n return this\n}\n\n// this is used if you want to fill the browser window with something inside #content but you want to also leave the footer and header on the page.\n$.fn.fillWindowWithMe = function(options) {\n const opts = $.extend({minHeight: 400}, options),\n $this = $(this),\n $wrapper = $('#wrapper'),\n $main = $('#main'),\n $not_right_side = $('#not_right_side'),\n $window = $(window),\n $toResize = $(this).add(opts.alsoResize)\n\n function fillWindowWithThisElement() {\n $toResize.height(0)\n const spaceLeftForThis =\n $window.height() -\n ($wrapper.offset().top + $wrapper.outerHeight()) +\n ($main.height() - $not_right_side.height()),\n newHeight = Math.max(400, spaceLeftForThis)\n\n $toResize.height(newHeight)\n if ($.isFunction(opts.onResize)) {\n opts.onResize.call($this, newHeight)\n }\n }\n fillWindowWithThisElement()\n $window\n .unbind('resize.fillWindowWithMe')\n .bind('resize.fillWindowWithMe', fillWindowWithThisElement)\n return this\n}\n\n$.fn.autoGrowInput = function(o) {\n o = $.extend(\n {\n maxWidth: 1000,\n minWidth: 0,\n comfortZone: 70\n },\n o\n )\n\n this.filter('input:text').each(function() {\n let minWidth = o.minWidth || $(this).width(),\n val = '',\n input = $(this),\n testSubject = $('').css({\n position: 'absolute',\n top: -9999,\n left: -9999,\n width: 'auto',\n fontSize: input.css('fontSize'),\n fontFamily: input.css('fontFamily'),\n fontWeight: input.css('fontWeight'),\n letterSpacing: input.css('letterSpacing'),\n whiteSpace: 'nowrap'\n }),\n check = function() {\n setTimeout(() => {\n if (val === (val = input.val())) {\n return\n }\n\n // Enter new content into testSubject\n testSubject.text(val)\n\n // Calculate new width + whether to change\n const testerWidth = testSubject.width(),\n newWidth =\n testerWidth + o.comfortZone >= minWidth ? testerWidth + o.comfortZone : minWidth,\n currentWidth = input.width(),\n isValidWidthChange =\n (newWidth < currentWidth && newWidth >= minWidth) ||\n (newWidth > minWidth && newWidth < o.maxWidth)\n\n // Animate width\n if (isValidWidthChange) {\n input.width(newWidth)\n }\n })\n }\n\n testSubject.insertAfter(input)\n\n $(this).bind('keyup keydown blur update change', check)\n })\n\n return this\n}\n\nexport default $\n","/*\n * Copyright (C) 2018 - present Instructure, Inc.\n *\n * This file is part of Canvas.\n *\n * Canvas is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, version 3 of the License.\n *\n * Canvas is distributed in the hope that it will be useful, but WITHOUT ANY\n * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n * A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License along\n * with this program. If not, see .\n */\n\nconst iframeAllowances = () => {\n const allowances = ENV.LTI_LAUNCH_FRAME_ALLOWANCES || []\n return allowances.join('; ')\n}\n\nexport default iframeAllowances\n","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\n\n/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 - present Instructure, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/**\n * Adapted from jQuery UI core\n *\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/ui-core/\n **/\nimport { getComputedStyle, findDOMNode, elementMatches } from './';\n\nfunction findFocusable(el, filter, shouldSearchRootNode) {\n var element = findDOMNode(el);\n\n if (!element || typeof element.querySelectorAll !== 'function') {\n return [];\n }\n\n var focusableSelector = 'a[href],frame,iframe,object,input:not([type=hidden]),select,textarea,button,*[tabindex]';\n var matches = Array.from(element.querySelectorAll(focusableSelector));\n\n if (shouldSearchRootNode && elementMatches(element, focusableSelector)) {\n matches = [].concat(_toConsumableArray(matches), [element]);\n }\n\n return matches.filter(function (el) {\n if (typeof filter === 'function') {\n return filter(el) && focusable(el);\n } else {\n return focusable(el);\n }\n });\n}\n\nfunction hidden(element) {\n var cs = getComputedStyle(element);\n return cs.display !== 'inline' && element.offsetWidth <= 0 && element.offsetHeight <= 0 || cs.display === 'none';\n}\n\nfunction positioned(element) {\n var POS = ['fixed', 'absolute'];\n if (POS.includes(element.style.position.toLowerCase())) return true;\n if (POS.includes(getComputedStyle(element).getPropertyValue('position').toLowerCase())) return true;\n return false;\n}\n\nfunction visible(element) {\n /* eslint no-param-reassign:0 */\n while (element) {\n if (element === document.body) break;\n if (hidden(element)) return false;\n if (positioned(element)) break;\n element = element.parentNode;\n }\n\n return true;\n}\n\nfunction focusable(element) {\n return !element.disabled && visible(element);\n}\n\nexport default findFocusable;\nexport {\n/**\n* ---\n* category: utilities/a11y\n* ---\n*\n* Given an element, finds and returns all visible, focusable children.\n* Focusable elements include input, select, textarea, button, and object.\n* Anchor tags are also focusable if they include an href or\n* tabindex attribute (including tabindeces less than zero).\n*\n* @param {ReactComponent|DomNode} el - component or DOM node\n* @param {Function} filter - a function to filter the matching nodes\n* @param {Boolean} shouldSearchRootNode - should the root node be included in the search\n* @returns {Array} array of all tabbable children\n*/\nfindFocusable };","/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 - present Instructure, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nexport default function generator(_ref) {\n var borders = _ref.borders,\n colors = _ref.colors,\n spacing = _ref.spacing,\n typography = _ref.typography;\n return {\n lineHeight: typography.lineHeightFit,\n h1FontSize: typography.fontSizeXXLarge,\n h1FontWeight: typography.fontWeightLight,\n h1FontFamily: typography.fontFamily,\n h2FontSize: typography.fontSizeXLarge,\n h2FontWeight: typography.fontWeightNormal,\n h2FontFamily: typography.fontFamily,\n h3FontSize: typography.fontSizeLarge,\n h3FontWeight: typography.fontWeightBold,\n h3FontFamily: typography.fontFamily,\n h4FontSize: typography.fontSizeMedium,\n h4FontWeight: typography.fontWeightBold,\n h4FontFamily: typography.fontFamily,\n h5FontSize: typography.fontSizeSmall,\n h5FontWeight: typography.fontWeightNormal,\n h5FontFamily: typography.fontFamily,\n primaryInverseColor: colors.textLightest,\n primaryColor: colors.textDarkest,\n secondaryColor: colors.textDark,\n secondaryInverseColor: colors.textLight,\n borderPadding: spacing.xxxSmall,\n borderColor: colors.borderMedium,\n borderWidth: borders.widthSmall,\n borderStyle: borders.style\n };\n}\n\ngenerator.canvas = function (variables) {\n return {\n primaryColor: variables['ic-brand-font-color-dark']\n };\n};\n\ngenerator['instructure'] = function (_ref2) {\n var typography = _ref2.typography;\n return {\n h1FontFamily: typography.fontFamilyHeading,\n h2FontFamily: typography.fontFamilyHeading,\n h3FontWeight: typography.fontWeightBold,\n h3FontSize: '2.125rem',\n h4FontWeight: typography.fontWeightBold,\n h4FontSize: typography.fontSizeLarge,\n h5FontWeight: typography.fontWeightBold,\n h5FontSize: typography.fontSizeMedium\n };\n};","/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 - present Instructure, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport { createThemeAdapter } from '@instructure/ui-themeable';\nvar map = {\n fontFamily: ['h1FontFamily', 'h2FontFamily', 'h3FontFamily', 'h4FontFamily', 'h5FontFamily']\n};\nexport var themeAdapter = createThemeAdapter({\n map: map,\n version: '8.0.0'\n});","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\n\nvar _dec, _dec2, _dec3, _class, _class2, _temp;\n\n/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 - present Instructure, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { View } from '@instructure/ui-view';\nimport { themeable, ThemeablePropTypes } from '@instructure/ui-themeable';\nimport { childrenOrValue } from '@instructure/ui-prop-types';\nimport { deprecated, getElementType, passthroughProps } from '@instructure/ui-react-utils';\nimport { testable } from '@instructure/ui-testable';\nvar styles = {\n componentId: 'blnAQ',\n template: function template(theme) {\n return \"\\n\\n.blnAQ_bGBk{line-height:\".concat(theme.lineHeight || 'inherit', \";margin:0}\\n\\ninput.blnAQ_bGBk[type]{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;border-radius:0;box-shadow:none;box-sizing:border-box;color:inherit;display:block;height:auto;line-height:inherit;margin:-0.375rem 0 0 0;outline:0;padding:0;text-align:start;width:100%}\\n\\n[dir=ltr] input.blnAQ_bGBk[type]{text-align:left}\\n\\n[dir=rtl] input.blnAQ_bGBk[type]{text-align:right}\\n\\ninput.blnAQ_bGBk[type]:focus{outline:none}\\n\\n.blnAQ_fCtg{font-family:\").concat(theme.h1FontFamily || 'inherit', \";font-size:\").concat(theme.h1FontSize || 'inherit', \";font-weight:\").concat(theme.h1FontWeight || 'inherit', \"}\\n\\n.blnAQ_cVrl{font-family:\").concat(theme.h2FontFamily || 'inherit', \";font-size:\").concat(theme.h2FontSize || 'inherit', \";font-weight:\").concat(theme.h2FontWeight || 'inherit', \"}\\n\\n.blnAQ_dnfM{font-family:\").concat(theme.h3FontFamily || 'inherit', \";font-size:\").concat(theme.h3FontSize || 'inherit', \";font-weight:\").concat(theme.h3FontWeight || 'inherit', \"}\\n\\n.blnAQ_KGwv{font-family:\").concat(theme.h4FontFamily || 'inherit', \";font-size:\").concat(theme.h4FontSize || 'inherit', \";font-weight:\").concat(theme.h4FontWeight || 'inherit', \"}\\n\\n.blnAQ_eYKA{font-family:\").concat(theme.h5FontFamily || 'inherit', \";font-size:\").concat(theme.h5FontSize || 'inherit', \";font-weight:\").concat(theme.h5FontWeight || 'inherit', \"}\\n\\n.blnAQ_dbSc{font-size:inherit;font-weight:inherit;line-height:inherit;margin:0}\\n\\n.blnAQ_bACI{border-top:\").concat(theme.borderWidth || 'inherit', \" \").concat(theme.borderStyle || 'inherit', \" \").concat(theme.borderColor || 'inherit', \";padding-top:\").concat(theme.borderPadding || 'inherit', \"}\\n\\n.blnAQ_kWwi{border-bottom:\").concat(theme.borderWidth || 'inherit', \" \").concat(theme.borderStyle || 'inherit', \" \").concat(theme.borderColor || 'inherit', \";padding-bottom:\").concat(theme.borderPadding || 'inherit', \"}\\n\\n.blnAQ_drOs{color:inherit}\\n\\n.blnAQ_eCSh{color:\").concat(theme.primaryColor || 'inherit', \"}\\n\\n.blnAQ_buuG{color:\").concat(theme.secondaryColor || 'inherit', \"}\\n\\n.blnAQ_bFtJ{color:\").concat(theme.primaryInverseColor || 'inherit', \"}\\n\\n.blnAQ_dsSB{color:\").concat(theme.secondaryInverseColor || 'inherit', \"}\\n\\n.blnAQ_bOQC{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\");\n },\n 'root': 'blnAQ_bGBk',\n 'level--h1': 'blnAQ_fCtg',\n 'level--h2': 'blnAQ_cVrl',\n 'level--h3': 'blnAQ_dnfM',\n 'level--h4': 'blnAQ_KGwv',\n 'level--h5': 'blnAQ_eYKA',\n 'level--reset': 'blnAQ_dbSc',\n 'border--top': 'blnAQ_bACI',\n 'border--bottom': 'blnAQ_kWwi',\n 'color--inherit': 'blnAQ_drOs',\n 'color--primary': 'blnAQ_eCSh',\n 'color--secondary': 'blnAQ_buuG',\n 'color--primary-inverse': 'blnAQ_bFtJ',\n 'color--secondary-inverse': 'blnAQ_dsSB',\n 'ellipsis': 'blnAQ_bOQC'\n};\nimport theme from './theme';\nimport { themeAdapter } from './themeAdapter';\n/**\n---\ncategory: components\n---\n**/\n\nvar Heading = (_dec = deprecated('8.0.0', {\n ellipsis: ''\n}), _dec2 = testable(), _dec3 = themeable(theme, styles, themeAdapter), _dec(_class = _dec2(_class = _dec3(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {\n _inherits(Heading, _Component);\n\n var _super = _createSuper(Heading);\n\n function Heading() {\n _classCallCheck(this, Heading);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Heading, [{\n key: \"render\",\n value: function render() {\n var _classnames;\n\n var _this$props = this.props,\n border = _this$props.border,\n children = _this$props.children,\n color = _this$props.color,\n level = _this$props.level,\n margin = _this$props.margin,\n elementRef = _this$props.elementRef,\n ellipsis = _this$props.ellipsis,\n props = _objectWithoutProperties(_this$props, [\"border\", \"children\", \"color\", \"level\", \"margin\", \"elementRef\", \"ellipsis\"]);\n\n var ElementType = getElementType(Heading, this.props, function () {\n if (level === 'reset') {\n return 'span';\n } else {\n return level;\n }\n });\n return /*#__PURE__*/React.createElement(View, Object.assign({}, passthroughProps(props), {\n className: classnames((_classnames = {}, _defineProperty(_classnames, styles.root, true), _defineProperty(_classnames, styles[\"level--\".concat(level)], true), _defineProperty(_classnames, styles[\"color--\".concat(color)], color), _defineProperty(_classnames, styles[\"border--\".concat(border)], border !== 'none'), _defineProperty(_classnames, styles.ellipsis, ellipsis), _classnames)),\n as: ElementType,\n margin: margin,\n elementRef: elementRef\n }), children);\n }\n }]);\n\n Heading.displayName = \"Heading\";\n return Heading;\n}(Component), _class2.propTypes = {\n /**\n * Add a top- or bottom-border to the Heading\n */\n border: PropTypes.oneOf(['none', 'top', 'bottom']),\n\n /**\n * The text content of the Heading\n */\n children: childrenOrValue,\n\n /**\n * The font color to render\n */\n color: PropTypes.oneOf(['primary', 'secondary', 'primary-inverse', 'secondary-inverse', 'inherit']),\n\n /**\n * The *visual* appearance of the Heading: h1 is largest; h5 is smallest.\n */\n level: PropTypes.oneOf(['h1', 'h2', 'h3', 'h4', 'h5', 'reset']),\n\n /**\n * Choose the element Heading should render as. Will default to the `level` prop\n * if not specified.\n */\n as: PropTypes.elementType,\n // eslint-disable-line react/require-default-props\n\n /**\n * Valid values are `0`, `none`, `auto`, `xxx-small`, `xx-small`, `x-small`,\n * `small`, `medium`, `large`, `x-large`, `xx-large`. Apply these values via\n * familiar CSS-like shorthand. For example: `margin=\"small auto large\"`.\n */\n margin: ThemeablePropTypes.spacing,\n\n /**\n * Provides a ref to the underlying HTML element\n */\n elementRef: PropTypes.func,\n\n /* eslint-disable react/require-default-props */\n\n /**\n * __Deprecated - use ` instead`__\n */\n ellipsis: PropTypes.bool\n /* eslint-enable react/require-default-props */\n\n}, _class2.defaultProps = {\n children: null,\n margin: void 0,\n elementRef: void 0,\n border: 'none',\n color: 'inherit',\n level: 'h2'\n}, _temp)) || _class) || _class) || _class);\nexport default Heading;\nexport { Heading };","/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 - present Instructure, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport { findDOMNode } from './findDOMNode';\n/**\n * ---\n * category: utilities/DOM\n * ---\n *\n * Polyfill for Element.matches (https://developer.mozilla.org/en-US/docs/Web/API/Element/matches)\n *\n * @param {ReactComponent|DomNode} el - component or DOM node\n * @param {String} selectorString - a string representing the selector to test\n * @returns {boolean} if the element would be selected by the specified selector string\n */\n\nfunction elementMatches(el, selectorString) {\n var node = el && findDOMNode(el);\n if (!node) return false;\n return node.matches ? node.matches(selectorString) : node.msMatchesSelector(selectorString);\n}\n\nexport default elementMatches;\nexport { elementMatches };"],"sourceRoot":""}