@nextcloud/vue
Version:
Nextcloud vue components
11 lines (10 loc) • 3.81 kB
JavaScript
;const p=require("./NcEllipsisedOption.cjs"),r=require("./NcSelect.cjs"),c=require("@nextcloud/axios"),d=require("@nextcloud/router"),a=require("../chunks/l10n-46d0c1c0.cjs"),h=require("../chunks/_plugin-vue2_normalizer-764a4c12.cjs"),l=e=>{let t={};if(e.nodeType===1){if(e.attributes.length>0){t["@attributes"]={};for(let s=0;s<e.attributes.length;s++){const i=e.attributes.item(s);t["@attributes"][i.nodeName]=i.nodeValue}}}else e.nodeType===3&&(t=e.nodeValue);if(e.hasChildNodes())for(let s=0;s<e.childNodes.length;s++){const i=e.childNodes.item(s),n=i.nodeName;if(typeof t[n]>"u")t[n]=l(i);else{if(typeof t[n].push>"u"){const u=t[n];t[n]=[],t[n].push(u)}t[n].push(l(i))}}return t},g=e=>{let t=null;try{t=new DOMParser().parseFromString(e,"text/xml")}catch(s){console.error("Failed to parse xml document",s)}return t},o=e=>{const t=l(g(e))["d:multistatus"]["d:response"],s=[];for(const i in t){const n=t[i]["d:propstat"];n["d:status"]["#text"]==="HTTP/1.1 200 OK"&&s.push({id:parseInt(n["d:prop"]["oc:id"]["#text"]),displayName:n["d:prop"]["oc:display-name"]["#text"],canAssign:n["d:prop"]["oc:can-assign"]["#text"]==="true",userAssignable:n["d:prop"]["oc:user-assignable"]["#text"]==="true",userVisible:n["d:prop"]["oc:user-visible"]["#text"]==="true"})}return s},m=async function(){if(window.NextcloudVueDocs)return Promise.resolve(o(window.NextcloudVueDocs.tags));const e=await c({method:"PROPFIND",url:d.generateRemoteUrl("dav")+"/systemtags/",data:`<?xml version="1.0"?>
<d:propfind xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns">
<d:prop>
<oc:id />
<oc:display-name />
<oc:user-visible />
<oc:user-assignable />
<oc:can-assign />
</d:prop>
</d:propfind>`});return o(e.data)},f={name:"NcSelectTags",components:{NcEllipsisedOption:p,NcSelect:r},props:{...r.props,fetchTags:{type:Boolean,default:!0},getOptionLabel:{type:Function,default:e=>{const{displayName:t,userVisible:s,userAssignable:i}=e;return s===!1?a.t("{tag} (invisible)",{tag:t}):i===!1?a.t("{tag} (restricted)",{tag:t}):t}},limit:{type:Number,default:5},multiple:{type:Boolean,default:!0},optionsFilter:{type:Function,default:null},passthru:{type:Boolean,default:!1},placeholder:{type:String,default:a.t("Select a tag")},value:{type:[Number,Array],default:null}," ":{}},emits:["input"," "],data(){return{search:"",availableTags:[]}},computed:{availableOptions(){return this.optionsFilter?this.tags.filter(this.optionsFilter):this.tags},localValue(){return this.tags.length===0?[]:this.multiple?this.value.filter(e=>e!=="").map(e=>this.tags.find(t=>t.id===e)):this.tags.find(e=>e.id===this.value)},propsToForward(){const{fetchTags:e,optionsFilter:t,passthru:s,...i}=this.$props;return i},tags(){return this.fetchTags?this.availableTags:this.options}},async created(){if(this.fetchTags)try{const e=await m();this.availableTags=e}catch(e){console.error("Loading systemtags failed",e)}},methods:{handleInput(e){this.multiple?this.$emit("input",e.map(t=>t.id)):e===null?this.$emit("input",null):this.$emit("input",e.id)}}};var y=function(){var e=this,t=e._self._c;return t("NcSelect",e._g(e._b({attrs:{options:e.availableOptions,"close-on-select":!e.multiple,value:e.passthru?e.value:e.localValue},on:{search:s=>e.search=s},scopedSlots:e._u([{key:"option",fn:function(s){return[t("NcEllipsisedOption",{attrs:{name:e.getOptionLabel(s),search:e.search}})]}},{key:"selected-option",fn:function(s){return[t("NcEllipsisedOption",{attrs:{name:e.getOptionLabel(s),search:e.search}})]}},e._l(e.$scopedSlots,function(s,i){return{key:i,fn:function(n){return[e._t(i,null,null,n)]}}})],null,!0)},"NcSelect",e.propsToForward,!1),{...e.$listeners,input:e.passthru?e.$listeners.input:e.handleInput}))},b=[],N=h.normalizeComponent(f,y,b,!1,null,null,null,null);const v=N.exports;module.exports=v;