Rev 1 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
YUI.add("moodle-atto_link-button",function(u,t){var n="atto_link",i={NEWWINDOW:"atto_link_openinnewwindow",URLINPUT:"atto_link_urlentry",URLTEXT:"atto_link_urltext"},h=".atto_link_openinnewwindow",o=".atto_link_urlentry",d=".atto_link_urltext",l=".submit",s=".openlinkbrowser";u.namespace("M.atto_link").Button=u.Base.create("button",u.M.editor_atto.EditorPlugin,[],{_currentSelection:null,_content:null,_hasTextToDisplay:!1,_hasPlainTextSelected:!1,initializer:function(){this.addButton({icon:"e/insert_edit_link",keys:"75",callback:this._displayDialogue,tags:"a",tagMatchRequiresAll:!1}),this.addButton({buttonName:"unlink",callback:this._unlink,icon:"e/remove_link",title:"unlink",tags:"a",tagMatchRequiresAll:!1})},_displayDialogue:function(){var t;this._currentSelection=this.get("host").getSelection(),!1!==this._currentSelection&&((t=this.getDialogue({headerContent:M.util.get_string("createlink",n),width:"auto",focusAfterHide:!0,focusOnShowSelector:o})).set("bodyContent",this._getDialogueContent()),this._resolveA
nchors(),t.show())},_resolveAnchors:function(){var t,e,n,i=this.get("host").getSelectionParentNode();i&&(0<(i=this._findSelectedAnchors(u.one(i))).length?(i=i[0],this._currentSelection=this.get("host").getSelectionFromNode(i),t=i.getAttribute("href"),e=i.getAttribute("target"),n=i.get("innerText"),i=i.getAttribute("title"),""!==t&&this._content.one(o).setAttribute("value",t),""!==n?this._content.one(d).set("value",n):""!==i&&this._content.one(d).set("value",i),"_blank"===e?this._content.one(h).setAttribute("checked","checked"):this._content.one(h).removeAttribute("checked")):""!==(n=this._getTextSelection())&&(this._hasTextToDisplay=!0,this._hasPlainTextSelected=!0,this._content.one(d).set("value",n)))},_filepickerCallback:function(t){this.getDialogue().set("focusAfterHide",null).hide(),""!==t.url&&(this._setLinkOnSelection(t.url),this.markUpdated())},_setLink:function(t){t.preventDefault(),this.getDialogue({focusAfterHide:null}).hide(),""!==(t=this._content.one(o).get("value"))&&(t=t.trim(),new RegExp(/^[a-
zA-Z]*\.*\/|^#|^[a-zA-Z]*:/).test(t)||(t="http://"+t),this._setLinkOnSelection(t),this.markUpdated())},_setLinkOnSelection:function(t){var e,n,i,o,l,s,a,c,r=this.get("host");if(this.editor.focus(),r.setSelection(this._currentSelection),n=!this._currentSelection[0].collapsed,i=this._content.one(d),""===(o=i.get("value").replace(/(<([^>]+)>)/gi,"").trim())&&(o=t),n){if(0<u.UA.gecko){for(l=document.getSelection(),(s=document.createElement("span")).setAttribute("data-wrapper",""),s.style.display="inline",a=0;a<l.rangeCount;a++)l.getRangeAt(a).surroundContents(s);r.setSelection(r.getSelectionFromNode(u.one(s))),document.execCommand("unlink",!1,null),document.execCommand("createLink",!1,t),c=s.parentNode,s.children.forEach(function(t){c.appendChild(t)}),s.remove()}else document.execCommand("unlink",!1,null),document.execCommand("createLink",!1,t);e=r.getSelectionParentNode()}else(i=u.Node.create("<a>"+o+"</a>")).setAttribute("href",t),e=r.insertContentAtFocusPoint(i.get("outerHTML")),r.setSelection(r.getSelectionF
romNode(e));if(e)return t=this._findSelectedAnchors(u.one(e)),u.Array.each(t,function(t){this._content.one(h).get("checked")?t.setAttribute("target","_blank"):t.removeAttribute("target"),n&&o&&(this._hasPlainTextSelected?t.set("innerText",o):t.setAttribute("title",o))},this),e},_findSelectedAnchors:function(t){var e,n,i=t.get("tagName");return i&&"a"===i.toLowerCase()?[t]:(n=[],t.all("a").each(function(t){!e&&this.get("host").selectionContainsNode(t)&&n.push(t)},this),0<n.length?n:(e=t.ancestor("a"))?[e]:[])},_getDialogueContent:function(){var t=this.get("host").canShowFilepicker("link"),e=u.Handlebars.compile('<form class="atto_form"><div class="mb-1"><label for="{{elementid}}_atto_link_urltext">{{get_string "texttodisplay" component}}</label><input class="form-control fullwidth {{CSS.URLTEXT}}" type="text" id="{{elementid}}_atto_link_urltext" size="32"/></div>{{#if showFilepicker}}<label for="{{elementid}}_atto_link_urlentry">{{get_string "enterurl" component}}</label><div class="input-group input-append w
-100 mb-1"><input class="form-control url {{CSS.URLINPUT}}" type="url" id="{{elementid}}_atto_link_urlentry"/><span class="input-group-append"><button class="btn btn-secondary openlinkbrowser" type="button">{{get_string "browserepositories" component}}</button></span></div>{{else}}<div class="mb-1"><label for="{{elementid}}_atto_link_urlentry">{{get_string "enterurl" component}}</label><input class="form-control fullwidth url {{CSS.URLINPUT}}" type="url" id="{{elementid}}_atto_link_urlentry" size="32"/></div>{{/if}}<div class="form-check"><input type="checkbox" class="form-check-input newwindow {{CSS.NEWWINDOW}}" id="{{elementid}}_{{CSS.NEWWINDOW}}"/><label class="form-check-label" for="{{elementid}}_{{CSS.NEWWINDOW}}">{{get_string "openinnewwindow" component}}</label></div><div class="mdl-align"><br/><button type="submit" class="btn btn-secondary submit">{{get_string "createlink" component}}</button></div></form>');return this._content=u.Node.create(e({showFilepicker:t,component:n,CSS:i})),this._content.one
(o).on("keyup",this._updateTextToDisplay,this),this._content.one(o).on("change",this._updateTextToDisplay,this),this._content.one(d).on("keyup",this._setTextToDisplayState,this),this._content.one(l).on("click",this._setLink,this),t&&this._content.one(s).on("click",function(t){t.preventDefault(),this.get("host").showFilepicker("link",this._filepickerCallback,this)},this),this._content},_unlink:function(){var e=this.get("host"),t=e.getSelection();t&&t.length&&(t[0].startOffset===t[0].endOffset?(t=e.getSelectedNodes())&&(t.each(function(t){t=t.ancestor("a",!0);t&&(e.setSelection(e.getSelectionFromNode(t)),document.execCommand("unlink",!1,null))},this),this.markUpdated()):(document.execCommand("unlink",!1,null),this.markUpdated()))},_setTextToDisplayState:function(){var t=this._content.one(d).get("value");this._hasTextToDisplay=""!==t},_updateTextToDisplay:function(){
var t=this._content.one(o),e=this._content.one(d),t=t.get("value");this._hasTextToDisplay||e.set("value",t)},_getTextSelection:function(){var t,e,n="",i=window.getSelection(),o=i.rangeCount;if(o){for(t=[],e=0;e<o;++e)t.push(""+i.getRangeAt(e));n=t.join("")}return n}})},"@VERSION@",{requires:["moodle-editor_atto-plugin"]});