2019独角兽企业重金招聘Python工程师标准>>> hot3.png

开源桌面系统,极简单的mvc设计、数据绑定实现、微事件实现等等。

下载地址:http://git.oschina.net/eternal_rider/sapling/attach_files

设计如下图:

Controller.js

var DtController={cache:{}, pubevt:function (topic,args,context) {var evtcontext = context || window,subs = evtcontext.DtController.cache[topic],len = subs ? subs.length : 0;while (len--) {subs[len].apply(evtcontext, args || []);}},subevt:function (topic,callback) {if (!DtController.cache[topic]) {DtController.cache[topic] = [];}DtController.cache[topic].push(callback);return [topic, callback]; },unsubevt:function (handle,callback) {var subs = DtController.cache[callback ? handle : handle[0]],callback = callback || handle[1],len = subs ? subs.length : 0;while (len--) {if (subs[len] === callback) {subs.splice(len, 1);}}},bindmodel:function(model,callback){Object.observe(model, callback);},init:function(){DtController.subevt('/dtname/set',DtModel.setDtname);DtController.subevt('/alias/set',DtModel.setAlias);DtController.subevt('/theme/set',DtModel.setTheme);DtController.subevt('/wallpaper/set',DtModel.setWallpaper);DtController.subevt('/mm/load',DtModel.loadMenu);DtController.subevt('/mm/app/set',DtModel.setApp);DtController.subevt('/app/xy/set',DtModel.setAppXY);DtController.bindmodel(DtModel,function(data){data.forEach(function(item, i){switch(item.name){case 'theme':DtView.setTheme(item.object[item.name]);break;case 'wallpaper':DtView.setWallpaper(item.object[item.name]);break;case 'alias':DtView.setAlias(item.object[item.name]);break;case 'dtname':DtView.setDtname(item.object[item.name]);break;case 'menus':DtView.setMenus(item.object[item.name]);break;case 'apps':DtView.setApps(item.object[item.name].list);break;};//console.log(change.type, change.name, change.oldValue);DtView.setNotifications('监听到DtModel中' + item.name+',触发'+ item.type+'事件');});});DtController.pubevt('/mm/load',[]);var urlstr=window.location.href,username=urlstr.substr(urlstr.indexOf("?")+1);DtModel.setUserName(username);DtView.init();}
};

model.js

var DtModel = {dtname:"",username:"",alias:"",theme:"",wallpaper:{},menus:{},apps:{},storage:window.localStorage,loadMenu:function(){//初始化开始菜单和邮件菜单$.getJSON("assets/menu.json", function(data) {if (data) {var mm_tmp = [],app_tmp = [];$(data.menu).each(function(i, item) {mm_tmp.push(item);});$(data.app).each(function(i, item) {app_tmp.push(item);});var obj = {mm:mm_tmp,app:app_tmp};DtModel.menus = obj;DtModel.load();}});//初始化桌面布局菜单},setDtname:function(name){DtModel.dtname = name;DtModel.save();},setUserName:function(username){DtModel.username = username;},setAlias:function(alias){DtModel.alias = alias;DtModel.save();},setTheme:function(theme){DtModel.theme = theme.colors;DtModel.save();},setWallpaper:function(data){DtModel.wallpaper = data;DtModel.save();},setApp:function(id){var list = $.extend([],DtModel.apps.list || []);$.each(list, function(i,data){if(data.id == id){list[i].state = list[i].state ==0?1:0;id = "-1";return false;}});if(id != "-1"){$.each(DtModel.menus.app, function(i,data){if(data.id == id){data.state = 1;list.push(data);return false;}});}DtModel.apps = {list:list};DtModel.save();},setAppXY:function(id,x,y){$.each(DtModel.apps.list, function(i,data){if(data.id == id){DtModel.apps.list[i].x=x,DtModel.apps.list[i].y=y;return false;}});DtModel.apps = {list:DtModel.apps.list};DtModel.save();},save:function(){if(DtModel.storage) {var data = {};data.dtname = DtModel.dtname;data.username = DtModel.username;data.alias = DtModel.alias;data.theme=DtModel.theme;data.wallpaper = DtModel.wallpaper;data.apps=DtModel.apps;DtModel.storage.sapling = JSON.stringify(data);//通过websocket保存到服务器}else{alert('不支持LocalStorage');}},load:function(){if(DtModel.storage) {if(DtModel.storage.sapling){var data = JSON.parse(DtModel.storage.sapling);DtModel.dtname = data.dtname;DtModel.username = data.username;DtModel.alias = data.alias ? data.alias:data.username;DtModel.theme = data.theme;DtModel.wallpaper = data.wallpaper;DtModel.apps = data.apps;}else{DtModel.alias = DtModel.username;}}else{alert('不支持LocalStorage');}}
}

view.js

var DtView = {"init":function(){setInterval(function() {var time = new Date();$("#time").html(time.toLocaleTimeString());}, 1000);using('calendar',function(){$('#calendar').calendar({firstDay:1,width:250,height:250});});using('textbox',function(){$('#dt_name').textbox({onClickButton:function(){var text = $('#dt_name').textbox('getText');if(text){DtController.pubevt('/dtname/set',[text]);}}});$('#alias').textbox({onClickButton:function(){var text = $('#alias').textbox('getText');if(text){DtController.pubevt('/alias/set',[text]);}}});});$("#start").mouseenter(function(e) {e.preventDefault();$(this).attr("src", "assets/ima/2.jpg");using("menu", function() {$('#startmm').menu('show', {left : 0,top : 40});});}).mouseleave(function() {$(this).attr("src", "assets/ima/1.jpg");});$('#dock').on('click','li',function(ev){var target = $(this).find('a').attr('href');if($(target).dialog('options').minimized){$(target).dialog('open');}else{$(target).dialog('minimize');}ev.preventDefault();ev.stopPropagation();});$('#user').mouseenter(function(ev){ev.preventDefault();ev.stopPropagation();$('#calendar').hide();$('#user_panel').fadeIn();});$('#user_panel').mouseleave(function() {$('#user_panel').fadeOut();});$('#time').mouseenter(function(ev){ev.preventDefault();ev.stopPropagation();$('#user_panel').hide();$('#calendar').fadeIn();});$('#calendar').mouseleave(function() {$('#calendar').fadeOut();});$('#desktop,#task_bar').on('contextmenu',function(e){e.preventDefault();var target=e.target||e.srcElement;var tid = $(target).attr('id');if(tid == 'desktop'){using("menu", function() {$('#mm-setup').menu('show', {left: e.pageX,top: e.pageY});});}else if(tid == 'task_bar'){alert('任务栏的右键事件');}else{return false;}});$('#setup_app').on('click','li',function(ev){DtController.pubevt('/mm/app/set',[$(this).attr('id')]);ev.preventDefault();ev.stopPropagation();});$('#user_blog').on('click',function(ev){ev.preventDefault();ev.stopPropagation();DtView.dialogHandler({"id":"myblog","title":"作者博客","link":"http://my.oschina.net/eternal/blog","load":"iframe","icon":"world","width":1280,"height":685});});$('#user_about').on('click',function(ev){ev.preventDefault();ev.stopPropagation();DtView.dialogHandler({"id":"aboutme","title":"关于作者","link":"apps/about/index.html","load":"iframe","icon":"user","maximized":true});});$('#help_user').on('click',function(ev){ev.preventDefault();ev.stopPropagation();DtView.dialogHandler({"id":"helpme","title":"随便给点吧","link":"apps/helpme/index.html","load":"iframe","icon":"heart","maximized":true});});$('#wallpapers_mm').on('click',function(ev){ev.preventDefault();ev.stopPropagation();DtView.dialogHandler({"id":"wallpapers","title":"桌面壁纸","link":"apps/wallpaper/index.html","load":"iframe","icon":"customization","width":1280,"height":685});});$('#logout').on('click',function(ev){ev.preventDefault();ev.stopPropagation();if (confirm("确认退出系统吗?")==true){window.location.href="index.html";}});},setDtname:function(name){document.title = name;using('textbox',function(){$('#dt_name').textbox('setText',name);});},setAlias:function(name){$('#user').text(name);using('textbox',function(){$('#alias').textbox('setText',name);});},setApps:function(list){if(!list){return false;}$.each(list, function(i,data){var hasapp = $("#desktop").children("#dt_"+data.id).html();if(!hasapp){var app = {id:data.id,width:data.width,height:data.height,title:data.title,x:data.x,y:data.y};$("#dtapp_tmpl").tmpl(app).appendTo("#desktop");var $appi = $("<iframe border=0 frameborder=0  style='width:100%;height:100%;'  scrolling='yes' src='"+data.link+"'></iframe>");$("#dt_body_"+data.id).html($appi);using("draggable",function(){$("#dt_"+data.id).draggable({onStopDrag:function(e){var x = $(this).offset().left,y = $(this).offset().top-41;DtController.pubevt('/app/xy/set',[data.id,x,y]);}});});}else{if(data.state == 0){$("#desktop").children("#dt_"+data.id).remove();}}});},setMenus:function(menus){$("#startmm_tmpl").tmpl(menus.mm).appendTo("#startmm");using('menu',function(){$('#startmm').menu({onClick:function(item){DtView.menuHandler(item);}});});$("#app_tmpl").tmpl(menus.app).appendTo("#setup_app");},setTheme:function(theme){var colors = theme.split(',');$('#task_bar').css('background-color',colors[0]).css('border-bottom','1px solid '+colors[1]);$('body').css('background-color',colors[2]);},setWallpaper:function(data){if(data.type == 'rgb'){$('body').css('background',data.name);}else{$('body').css('background','#777777 url(assets/ima/'+data.name+')');}},setNotifications:function(content){var $lists = $("#user_panel_news").children(".notifications");if($lists.length >= 3){$lists[2].remove();}$("#notifications_tmpl").tmpl({content:content}).prependTo("#user_panel_news");},menuHandler:function(item) {var menumodel = {};$.each(DtModel.menus.mm, function(i,data){if(data.id == item.id){menumodel = data;return false;}});if(menumodel.id){DtView.dialogHandler(menumodel);}},  dialogHandler:function(menumodel) {if ($("#mm_"+menumodel.id).length > 0) {$("#mm_"+menumodel.id).html("");} else {$("#desktop").append("<div id='mm_"+menumodel.id+"' style='overflow: hidden;'></div>");}using('dialog', function() {var dlgconfig = {title:'&nbsp;'+menumodel.title,width:menumodel.width,height:menumodel.height,iconCls:'icon-'+menumodel.icon,collapsible:menumodel.collapsible||true,minimizable:menumodel.minimizable||true,maximizable:menumodel.maximizable||true,resizable:menumodel.resizable||true,draggable:menumodel.draggable||true,inline:true,shadow:true,maximized:menumodel.maximized||false,onBeforeClose:function(){$('#dock_'+menumodel.id).remove();$(this).parent().next().remove();$(this).parent().remove();},content : "<iframe border=0 frameborder=0  style='width:100%;height:100%;'  scrolling='yes' src='"+menumodel.link+"'  sandbox=\"allow-scripts allow-same-origin allow-forms\"></iframe>"};menumodel.load == "ajax"?dlgconfig.href=menumodel.link:"";$("#mm_"+menumodel.id).dialog(dlgconfig);});$('<li id="dock_'+menumodel.id+'"><a href="#mm_'+menumodel.id+'"><img src="assets/ima/' + menumodel.icon + '_22.png" />'+menumodel.title+'</a></li>').appendTo('#dock');}
};

转载于:https://my.oschina.net/eternal/blog/616149

开源桌面系统及设计图、下载地址相关推荐

  1. java邮件系统(java邮件收发系统源代码和下载地址)

    2019独角兽企业重金招聘Python工程师标准>>> 本软件包包括源文件和可执行的jar文件 项目下载地址: 下载 1.     运行方式 A可以直接运行jar文件(电脑上必须安装 ...

  2. windows10系统纯净版下载地址

    windows10系统纯净版下载地址 : https://www.microsoft.com/zh-cn/software-download/windows10

  3. Windows 7系统和Windows 10系统的镜像下载地址集(含专业版)

    Windows 7系统和Windows 10系统的镜像下载地址集(含专业版) 说明: multiple editions 多版,包含:家庭版.专业版 enterprise 企业版 education ...

  4. linux系统开发版下载,Ubuntu 21.10(Impish Indri)桌面开发版iso下载地址

    Ubuntu 21.10(Impish Indri)已经提供开发版iso下载了,用户可下载impish-desktop-amd64.iso.arm64.iso试用,这些iso都是每日构建版本,使用这些 ...

  5. 微软、谷歌、亚马逊、Facebook等硅谷大厂91个开源软件盘点(附下载地址)

    开源软件中有大量专家构建的代码,大大节省了开发人员的时间和成本,热衷于开源的大厂们总是能够带给我们新的惊喜.2016年9月GitHub报告显示,GitHub已经有超过 520 万的用户和超 30 万的 ...

  6. Ubuntu 系统全世界镜像下载地址 (全)

    觉得有用点个赞呗~ 里面包含Ubuntu全世界镜像下载地址,下拉找到"China" 即可快速下载对应系统的iso文件! Ubuntu全世界镜像下载地址:全世界Ubuntu镜像链接. ...

  7. 苹果系统安装虚拟机 Mac如何安装虚拟机教程 (含系统镜像的下载地址)

    镜像下载地址 http://www.itellyou.cn 1.前言    大家在用 Mac 系统的时候,可能有时难免还是要用到 Windows 系统.在 Mac 上使用 Windows 系统有二种方 ...

  8. 各系统勒索补丁下载地址

    各系统补丁官方下载地址如下: [KB4012598]:http://www.catalog.update.microsoft.com/Search.aspx?q=KB4012598 适用于Window ...

  9. Centos 各版本系统ISO镜像下载地址

    https://www.centos.org/download/mirrors/ 需要在里面一个个看,有些是没有旧版本镜像的 补充: 上面这个方法很难再找到旧版本了 更好的方法如下:以下载Centos ...

最新文章

  1. java转账_使用Java模拟银行账户存、取款、转账功能
  2. CV之YOLOv3:基于Tensorflow框架利用YOLOv3算法对热播新剧《庆余年》实现目标检测
  3. 链表题目---6 复制带随机指针的链表
  4. leetcode 191. 位1的个数(位运算)
  5. 获取IE (控件)的所有链接(包括Frameset, iframe)zz
  6. [git] git fsck --lost-found命令用法
  7. ubuntu桌面美化mac_Ubuntu16.04 主题美化
  8. C#解决“Emgu.CV.CvInvoke”的类型初始值设定项引发异常 的其中一个办法
  9. 编译OpenJDK8:configure error /usr/lib64/ccache/gcc is a symbolic link to ccache
  10. 第六章 梯度下降法 学习笔记 上
  11. 同济大学《高等数学》上册答案
  12. hadoop配置启动historyserver
  13. 8086/8088CPU内部结构
  14. 当Apple TV+的生态化反梦,撞上一个“日渐昂贵”的流媒体市场
  15. 富集分析(GO、KEGG、GSEA)
  16. Hbuilder链接逍遥模拟器
  17. 健身房有哪些令人讨厌的行为?
  18. 20190919CF训练
  19. 禹司凤扛鸿蒙炉,琉璃美人煞12人物结局,司凤 璇玑完满,柏麟 副宫主结局大快人心...
  20. tiptop自定义发送邮件

热门文章

  1. 量子的飞跃:下一代D-Wave量子芯片计算速度能快1000倍
  2. Python编写爬虫编写到Excel中
  3. Spring MVC 原理探秘 - 一个请求的旅行过程
  4. linux上源码编译安装mysql-5.6.28
  5. 使用IIS组建PHP服务器
  6. 转载 为什么不要 lock(this) ? lock object 并是readonly
  7. 关于机房有八台计算出现E盘无法更改盘符的问题
  8. python爬虫系列(1.3-关于cookie的认识)
  9. 用javascript进行一个简单的机器学习小实例
  10. 【深度学习之美】卷地风来忽吹散,积得飘零美如画(入门系列之十)