You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

503 lines
26 KiB

<!DOCTYPE html>
<html lang="cn">
<head>
<meta charset="UTF-8">
<title>...</title>
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<script>
window.yluiVersion = '2.1.9';
document.write('<link rel="stylesheet" href="./res/css/loading.css?v='+window.yluiVersion+'"/>');
document.write('<script src="res/yl.js?v='+window.yluiVersion+'"><\/script>');
document.write('<script src="onLoad.js?v='+window.yluiVersion+'"><\/script>');
</script>
</head>
<body style="padding: 0;margin: 0;background: black">
<div id="loading">
<div class="box" id="loading-box">
<p class="title"><span id="loading-software-name"></span> <span id="loading-lang-init"></span></p>
<p id="on-load-file-name">...</p>
<div class="circle-box">
<div class="circle"></div>
<div id="text-percent">0</div>
<div class="mask right">
<div id="loading-right" class="circle right"></div>
</div>
<div class="mask left">
<div id="loading-left" class="circle left"></div>
</div>
</div>
</div>
<p id="loading-powered-by"></p>
</div>
<!--图标模板-->
<script type="text/x-template" id="tpl-icon">
<div :class="[drawer?'icon-drawer-pre':'icon']" :style="{background:nobg?'none':icon.bg}">
<template v-if="icon.type==='str'">
{{icon.content.substr(0, 1)}}
</template>
<i v-if="icon.type==='fa'" class="fa fa-fw"
:class="[ 'fa-'+icon.content ]">
</i>
<template v-if="icon.type==='img'">
<img ondragstart="return false;" class="fa" :src="img?img:icon.content"
onerror="this.src='./res/img/icon/error.png'"/>
</template>
<div class="badge" v-show="badge">{{badgeText(badge)}}</div>
</div>
</script>
<!--菜单模板-->
<script type="text/x-template" id="tpl-menu">
<div class="menu" @contextmenu.self="onMainContextMenu($event)">
<yl-menu-item
class="animated fadeInUp"
:style="{'animation-duration': '0.3s', 'animation-delay': index*0.05+'s'}"
v-for="(item, id, index) in menu"
:open="true"
:item="item"
:itemid="id"
:depth="0"
@itemclick="onItemClick($event)"
@itemcontextmenu="onItemContextMenu($event)"
:apps="apps">
</yl-menu-item>
</div>
</script>
<script type="text/x-template" id="tpl-menu-item">
<div>
<div class="item"
@contextmenu="onContextMenu($event)"
:class="{open:open}" @click="click">
<span :style="{'margin-left':depth*15+'px'}"></span>
<yl-icon v-if="!item.children" :icon="apps[item.app].icon"></yl-icon>
<div v-else class="icon-drawer">
<template v-for="(c1, id1) in item.children">
<yl-icon v-if="!c1.children" :icon="apps[c1.app].icon" :badge="0" class="icon-drawer-pre"
:drawer="true"></yl-icon>
</template>
</div>
<span class="title">{{item.title}}</span>
<div v-if="item.children" class="arrow" :class="{open:item.open}">
<i class="fa fa-fw fa-angle-up"></i>
<i class="fa fa-fw fa-angle-down"></i>
</div>
</div>
<yl-menu-item
v-if="item.children"
v-for="(subItem, subId) in item.children"
:item="subItem"
:itemid="subId"
:depth="depth+1"
:open="item.open&&open"
@itemclick="onItemClick($event)"
@itemcontextmenu="onItemContextMenu($event)"
:apps="apps">
</yl-menu-item>
</div>
</script>
<div id="yl" :class="{'small-screen':runtime.isSmallScreen,'horizontal-screen':runtime.isHorizontalScreen}"
style="display: none;opacity: 0" unselectable="on"
v-show="ready">
<!--桌面 图标 抽屉 窗体-->
<div class="desktop "
:style="{top:configs.topTaskBar?40+'px':0}">
<!--图标-->
<div class="shortcut" :class="shortcutClass(id,s)" v-for="(s, id) in shortcuts"
:key="id"
@mousedown="shortcutMouseDown(id,null, $event)"
@touchstart="shortcutMouseDown(id,null, $event)"
v-show="runtime.shortcutsShow"
@contextMenu="shortcutContextMenu(id,null,$event)"
:title="s.title"
:style="shortcutStyle(id,null)">
<yl-icon v-if="!s.children" :icon="apps[s.app].icon" :badge="apps[s.app].badge"></yl-icon>
<div class="icon-drawer" v-if="s.children">
<template v-for="(s1, id1) in s.children">
<yl-icon :icon="apps[s1.app].icon" :badge="0" class="icon-drawer-pre"
:drawer="true"></yl-icon>
</template>
<div class="badge" v-show="shortcutGetDrawerBadge(id)">{{badgeText(shortcutGetDrawerBadge(id))}}</div>
</div>
<div class="title">
{{s.title}}
</div>
</div>
<!--抽屉渲染-->
<transition name="opacity">
<div class="shader " v-if="shortcuts[drawer]"
@mousedown.self="if(Date.now()-runtime.shortcutOpenedAt>500) drawer=null"
style="z-index:999999">
<div class="drawer">
<div class="mask"
:style="{background:configs.themeColor}"></div>
<div class="title">{{shortcuts[drawer].title}}</div>
<div class="shortcut" v-for="(s, id) in shortcuts[drawer].children"
:class="shortcutClass(id,s,true)"
@mousedown="shortcutMouseDown(id,drawer, $event)"
@touchstart="shortcutMouseDown(id,drawer, $event)"
@contextMenu="shortcutContextMenu(id,drawer,$event,true)"
:title="s.title" :style="{left:s.drag.left+'px',top:s.drag.top+'px'}">
<yl-icon v-if="!s.drawer" :icon="apps[s.app].icon" :badge="apps[s.app].badge"></yl-icon>
<div class="title">
{{s.title}}
</div>
</div>
</div>
</div>
</transition>
<!--窗体渲染-->
<transition-group name="opacity">
<div v-for="(w,id) in wins" class="win shadow" :key="id"
:id="id"
v-show="!winIsMin(id)"
@mousedown="winSetActive(id)"
:class="winClass(id)"
:style="winStyle(id)">
<div v-if="!w.plugin&&w.init" class="init" :style="{'background-color':w.icon.bg || configs.themeColor}">
<yl-icon :icon="w.icon" :badge="0" :style="winInitIconStyle(id)"></yl-icon>
<div class="load-3">
<div v-if="!runtime.isSmallScreen" class="k-line2 k-line12-2" style="animation-delay: .7s"></div>
<div v-if="!runtime.isSmallScreen" class="k-line2 k-line12-3" style="animation-delay: .6s"></div>
<div class="k-line2 k-line12-4" style="animation-delay: .5s"></div>
<div class="k-line2 k-line12-5" style="animation-delay: .4s"></div>
<div class="k-line2 k-line12-6" style="animation-delay: .3s"></div>
<div class="k-line2 k-line12-7" style="animation-delay: .2s"></div>
<div class="k-line2 k-line12-8" style="animation-delay: .1s"></div>
</div>
</div>
<div class="bar-box">
<div class="bar" :class="{'no-max':w.plugin||!w.resizable}">
<div class="mask bar-mask"></div>
<div class="mask" :style="{background:w.init?(w.icon.bg || configs.themeColor):configs.themeColor, opacity:w.init?1:0.9}" ></div>
<!--标题栏-->
<div class="title" :title="w.title"
@contextMenu="winContextMenu(id,$event)"
@dblclick="winTitleDblclick(id)"
@mousedown="winTitleMouseDown(id,$event)"
@touchstart="winTitleMouseDown(id,$event)">
<yl-icon :icon="w.icon"></yl-icon>
{{w.title}}
</div>
<div class="tools">
<span style="background-image: url('./res/img/icon/minimize.svg')" class="tool" @click="winMinimize(id)" ></span>
<span v-if="!w.plugin&&w.state==='normal'&&w.resizable&&!runtime.isSmallScreen"
style="background-image: url('./res/img/icon/maximize.svg')"
class="tool"
@click="winMaximize(id)" ></span>
<span v-if="!w.plugin&&w.state==='max'&&!runtime.isSmallScreen"
class="tool"
style="background-image: url('./res/img/icon/restore.svg')"
@click="winRestore(id)" ></span>
<span class="tool close" @click="winClose(id)" style="background-image: url('./res/img/icon/close.svg')" ></span>
<div style="clear: both"></div>
</div>
<div style="clear: both"></div>
</div>
<div v-show="w.addressBar" class="address-bar">
<i class="btns fa fa-fw fa-arrow-left" :class="{disable:!YL.child.historyBackAvailable(id)}"
@click="YL.child.historyBack(id)"></i>
<i class="btns fa fa-fw fa-arrow-right"
:class="{disable:!YL.child.historyForwardAvailable(id)}"
@click="YL.child.historyForward(id)"></i>
<i class="btns fa fa-fw fa-rotate-right"
:class="{disable:!w.childSupport}"
@click="!w.childSupport||winRefresh(id)"></i>
<i class="btns fa fa-fw fa-home" @click="winHome(id)"></i>
<input v-model="w.urlBar" spellcheck="false" @keyup.enter="w.url=w.urlBar">
</div>
</div>
<div class="win-drag-placeholder">
<div class="mask" style="z-index: 2" v-show="runtime.drag"></div>
<iframe :id="w.idIframe" :name="id" class="frm"
:src="w.url"></iframe>
<div v-show="w.resizable" class="win-resize" @mousedown="winResizeMouseDown(id,$event)"></div>
<div class="win-move"
@contextMenu="winContextMenu(id,$event)"
@mousedown="winTitleMouseDown(id,$event)"
@touchstart="winTitleMouseDown(id,$event)"
></div>
</div>
</div>
</transition-group>
<!--背景图-->
<div class="background-mask "
@click.self="desktopClick"
@mousemove.self="desktopMouseMove"
@mousedown.self="desktopMouseDown"
@mouseup.self="desktopMouseUp"
@contextMenu.self="desktopContextMenu"></div>
<div class="background"
:class="{blur:configs.wallpaperBlur, cross:backgroundCross}"
:style="{'background-image':'url('+runtime.wallpaper+')'}"></div>
</div>
<!--任务栏-->
<div class="bar" @contextMenu="barContextMenu" :style="barStyle" :class="{top:configs.topTaskBar}">
<div class="mask" :style="{background:configs.themeColor}"></div>
<div class="mask" :style="{background:'rgba(0,0,0,0.18)'}"></div>
<div class="mask powered-by" :class="{fade: runtime.winOpened}" >
Powered by YLUI v{{YL.info.version}}
</div>
<!--开始按钮-->
<div class="btn shadow-hover fa fa-fw"
style="width: 36px;"
:class="[ 'fa-'+YL.info.iconBtnStart, {btnStartOpen: startMenu.open } ]"
@click="if(startMenu.open){hideOpens();}else{hideOpens();startMenu.open=true} "></div>
<!--子窗口的按钮-->
<div class="btn win-task" @click="winTaskClick(id)"
:class="{active:id===runtime.winActive&&!winIsMin(id),shadow:id===runtime.winActive&&!winIsMin(id)}"
v-for="(w,id) in wins" v-if="!w.plugin" @contextMenu="winContextMenu(id,$event)"
:style="{'width':parseInt((runtime.clientSize.width-210+(runtime.isSmallScreen?80:0))/runtime.winOpened)+'px'}">
<yl-icon :icon="w.icon"></yl-icon>
<div class="title">{{w.title}}</div>
<div class="line"></div>
</div>
<!--显示桌面-->
<div id="yl-btn-right-bottom"
@click="if(smallScreenAndMenuOpend){runtime.menuOnLeft=!runtime.menuOnLeft} else {showDesktop()}"
:class="{'fa-exchange':smallScreenAndMenuOpend}"
class="btn shadow-hover fa fa-fw"></div>
<!--消息-->
<div id="yl-btn-center" class="btn shadow-hover " style="float: right"
@click="btnCenterClick()">
<div class="badge"
:style="{bottom:configs.topTaskBar?'-18px':'none',top:configs.topTaskBar?'auto':'0'}"
v-show="center.unread">{{center.unread>99?'99+':center.unread}}
</div>
</div>
<!--时间-->
<div class="btn shadow-hover" v-show="!runtime.isSmallScreen" v-html="runtime.time"
:title="runtime.date && runtime.date.toLocaleString()"
@click="runtime.CalendarOpen=!runtime.CalendarOpen;runtime.pluginIconsOpen=false;"
style="font-size: 12px;float: right"></div>
<!--托盘按钮-->
<div class="btn shadow-hover fa fa-fw "
:class="{'fa-angle-up':!configs.topTaskBar,'fa-angle-down':configs.topTaskBar}"
style="float: right;padding: 0"
@click="runtime.pluginIconsOpen=!runtime.pluginIconsOpen;runtime.CalendarOpen=false;"></div>
<!--插件托盘盒子-->
<transition name="opacity">
<div class="plugin-icons shadow" v-show="runtime.pluginIconsOpen">
<div class="mask" :style="{background:configs.themeColor}" ></div>
<div class="mask" style="background: white; opacity: 0.04"></div>
<div class="plugin-icon" @click="winShowToggle(id)"
:class="{active:id===runtime.winActive&&!winIsMin(id)}"
v-for="(w,id) in wins" v-if="w.plugin" @contextMenu="winContextMenu(id,$event)"
:title="w.title"
:style="{opacity:winIsMin(id)?0.6:1}">
<yl-icon :icon="w.icon"></yl-icon>
</div>
</div>
</transition>
<!--日历盒子-->
<transition name="opacity">
<div id="_box_time" @contextMenu="ContextMenu.render($event,true)" class="calendar-box shadow"
v-show="runtime.CalendarOpen">
<div class="mask" :style="{background:configs.themeColor}" ></div>
<div class="mask" style="background: white; opacity: 0.02"></div>
<div class="_h_m_s div-time"></div>
<div class="_y_m_d div-time"></div>
<div class="calendar clearfix">
<div class="_header">
<strong></strong>
<span class="aL"><</span>
<span class="aR">></span>
</div>
<div class="_normal">
<div class="_week clearfix"></div>
<div class="_days clearfix">
<ul class="clearfix"></ul>
</div>
</div>
<div class='_years_months clearfix'>
<ul></ul>
</div>
<div class="_tenyears clearfix">
<ul></ul>
</div>
</div>
</div>
</transition>
</div>
<!--开始菜单-->
<transition name="opacity">
<div class="startMenu shadow"
:style="{width: runtime.startMenu.width+'px', height: runtime.startMenu.height +'px'}"
@click="center.open = false;runtime.pluginIconsOpen = false;runtime.CalendarOpen = false;"
v-show="startMenu.open"
:class="{topTaskBar:configs.topTaskBar}">
<div class="mask"
:style="{background:configs.themeColor}"></div>
<div class="startMenu-resize"
@mousedown="startMenuResizeMouseDown($event)"></div>
<!--左侧边栏-->
<div class="sidebar"
:style="{'background-color': configs.themeColor}"
:class="{spread:startMenu.sidebar.open,'shadow-hover':startMenu.sidebar.open}"
@mouseleave="startMenu.sidebar.open=false">
<div class="mask"
style="background-color: white"
:style="{opacity: startMenu.sidebar.open ? 0.04 : 0.02}"></div>
<div @click="startMenu.sidebar.open=!startMenu.sidebar.open" class="btn">
<i class="fa fa-fw fa-align-justify"></i><span class="title">{{YL.lang("Start")}}</span></div>
<div class="btn-group">
<div v-for="(b, i) in startMenu.sidebar.btns" :title="b.title" class="btn"
@contextMenu="sidebarBtnContextMenu(i,$event)"
@click="appOpen(b.app,b,b)">
<yl-icon :icon="apps[b.app].icon" :badge="apps[b.app].badge" :nobg="true"></yl-icon>
<span class="title">{{b.title}}</span>
</div>
</div>
</div>
<!--主菜单-->
<yl-menu
:style="menuStyle"
@maincontextmenu="menuMainContextMenu($event)"
@itemcontextmenu="menuContextMenu($event)"
@itemclick="menuItemClick($event)" :menu="startMenu.menu" :apps="apps">
</yl-menu>
<!--磁贴-->
<div class="tiles-box" @contextMenu="tilesBoxContextMenu($event)" :style="tilesBoxStyle">
<div class="tiles-flex-container" :style="{'column-count':runtime.tilesGroupNum}">
<div class="tiles" :style="{width: runtime.tilesWidth+'px'}"
v-for="(tileGroup,groupIndex) in tiles">
<div class="title" @contextMenu="tilesTitleContextMenu(groupIndex,$event)">{{tileGroup.title}}
<i @click="shortSetting=tileGroup" class="fa fa-navicon tip"></i>
</div>
<grid-layout
:layout="tileGroup.data"
:col-num="6"
:row-height="runtime.tileSize"
:is-draggable="true"
:is-resizable="true"
:vertical-compact="true"
:margin="[4,4]"
:use-css-transforms="false"
:autoSize="false"
>
<grid-item v-for="(tile,i) in tileGroup.data"
@moved="tileMoved"
:x="tile.x"
:y="tile.y"
:w="tile.w"
:h="tile.h"
:i="tile.i">
<div class="tile animated zoomIn"
:style="{'animation-duration': '0.3s', 'animation-delay': Math.random()/8+'s'}"
:title="tile.title"
@mousedown="tileMouseDown($event)"
@click="tileClick(tile)" @contextMenu="tileContextMenu(groupIndex,i,$event)">
<div class="mask" style="opacity:0.85"
:style="{'background-color':apps[tile.app].icon.bg}">
<div class="badge" v-show="apps[tile.app].badge">
{{badgeText(apps[tile.app].badge)}}
</div>
<iframe class="custom-tile" v-if="apps[tile.app].customTile"
frameborder="0" scrolling="no" hspace="0"
:src="tileSrcCustom(apps[tile.app])" ></iframe>
<yl-icon v-else :icon="apps[tile.app].icon" :badge="0"
:style="tileStyle(tile)"></yl-icon>
<div v-show="Math.min(tile.w,tile.h)*runtime.tileSize>80" class="title">
{{tile.title}}
</div>
</div>
<!--<div class="mask" style="opacity: 0.3;background-color: white"></div>-->
</div>
</grid-item>
</grid-layout>
</div>
</div>
</div>
</div>
</transition>
<!--操作中心-->
<div class="center shadow" :class="{open:center.open}" :style="centerStyle">
<div class="mask"
:style="{background:configs.themeColor}"></div>
<div class="banner">{{YL.lang("NoticeCenter")}}
<div class="clear" v-show="center.msgNum>0" @click="btnCenterClear">{{YL.lang("NoticeClearAll")}}</div>
</div>
<transition
name="custom-classes-transition-msg"
enter-active-class="animated slideInRight"
leave-active-class="animated slideOutRight">
<div style="animation-duration: 0.5s" class="banner no-msg" v-show="center.msgNum<=0">
{{YL.lang("NoMoreNotice")}}
</div>
</transition>
<div class="msgs">
<transition-group
name="custom-classes-transition-msg"
enter-active-class="animated bounceInRight"
leave-active-class="animated bounceOutRight">
<div v-for="(m,id) in center.msg" class="msg shadow-hover" :key="id">
<div class="title">{{m.title}}
<div class="btn-close" @click="msgClose(id)"><i class="fa fa-trash"></i></div>
</div>
<div class="content selectable" v-html="m.content"></div>
</div>
</transition-group>
</div>
</div>
<!--快捷方式配置-->
<transition name="opacity">
<div class="shader" v-if="shortSetting"
@click.self="shortSetting=null;runtime.shortcutNewParamName='',runtime.shortcutNewParamValue=''"
:style="{'z-index':19930005}">
<div class="drawer">
<div class="mask"
:style="{background:configs.themeColor}"></div>
<div class="title">{{shortSetting.title}}<span v-if="shortSetting.app" class="btn-advance"
@click="btnShortSettingAdvanceClick(shortSetting.app)">{{YL.lang("Advance")}}</span>
</div>
<div class="line" :style="{'margin-top':shortSetting.params?0:'64px'}">
<span>{{YL.lang("Title")}}</span> <input spellcheck="false" autofocus
v-model="shortSetting.title"/>
</div>
<template v-if="shortSetting.params">
<div class="line">
<span>{{YL.lang("Hash")}}</span> <input spellcheck="false" v-model="shortSetting.hash"/>
</div>
<div class="line">
<input spellcheck="false" :placeholder="YL.lang('Key')"
v-model="runtime.shortcutNewParamName"/>
<input spellcheck="false" :placeholder="YL.lang('Value')"
v-model="runtime.shortcutNewParamValue"/>
<i class="fa fa-plus-circle" @click="shortSettingParamsAdd"></i>
</div>
<div v-for="(val,name) in shortSetting.params"
class="line">
<span :title="name">{{name}}</span>
<input spellcheck="false" v-model="shortSetting.params[name]"/>
<i class="fa fa-minus-circle" @click="shortSettingParamsDelete(name)"></i>
</div>
</template>
</div>
</div>
</transition>
<!--消息预览-->
<transition-group
name="custom-classes-transition-msg"
enter-active-class="animated bounceInRight"
leave-active-class="animated bounceOutRight">
<div v-for="(msg,id) in msgPres" class="msg-attention animated" :key="msg.key"
@click="center.open = true"
:style="{bottom: msg.index*180+40+'px'}" v-if="msg">
<div class="mask" :style="{background:configs.themeColor}"></div>
<div class="title">{{msg.title}}</div>
<div class="content selectable" v-html="msg.content"></div>
<div class="mask-msg"
:style="{background: 'linear-gradient(to top,'+configs.themeColor+','+configs.themeColor+' 50%,transparent)'}"></div>
</div>
</transition-group>
</div>
</body>
</html>