<?php /* * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ ?> <?php # Check if json.txt file needs to be generated # 判断json.txt是否存在 # 这个文件定义了一些数据,如app的名字、图标存放的路径、 # shell脚本执行的位置及参数等等内容 if(!file_exists("json.txt")) { //Generate the json.txt file # 为什么这里可以用php?,主要是没看到哪里配置了环境变量 # 答案好像是因为lighttpd配置文件里配置了php的位置 # 另外generate.php能够生成json.txt文件 system("php generate.php"); //Remove the cache since it is based on the previous json.txt file # 删除缓冲文件 system("rm -rf cache/*"); } if(!file_exists("cache")) { mkdir("cache",6666); # 缓冲文件不存在,那么就创建它,并给出相应的权限 } $supportedResolutions = null; # 这个是保存了屏幕分辨率,以及一屏中有多少行、多少列图标 if(file_exists("supported_resolutions.txt")==true) { # 将文件读入一个数组中 $supportedResolutions = file ("supported_resolutions.txt",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); } # count: 计算数组中的单元数目或对象中的属性个数,对于数组,返回其元素个数 if($supportedResolutions == null || count($supportedResolutions) == 0) { echo "supported_resolutions.txt doesn't exist or is empty"; exit; } # SERVER_NAME: 当前运行脚本所在服务器主机的名称 # REMOTE_ADDR: 正在浏览当前页面用户的IP地址 $client_is_host = $_SERVER['SERVER_NAME']==$_SERVER['REMOTE_ADDR']||$_SERVER['SERVER_NAME'] == "localhost"; ?> <html> <head> <title>Matrix Application Launcher</title> <meta http-equiv="X-UA-Compatible" content="IE=EDGE" /> <!-- 添加元信息 --> <link rel="stylesheet" type="text/css" href="css/fonts-min.css"> <!-- 加载样式 --> <script type="text/javascript" src="/javascript/jquery-latest.js"></script> <!-- 加载jquery库 --> <link rel='stylesheet' type='text/css' href='css/global.css'> <!-- 加载样式 --> </head> <body class="unselectable" style = "-webkit-user-select: none;-moz-user-select: none;"> <div id = "complete_container"></div> <script> var has_graphics = true; var link_history = ["submenu.php?submenu=main_menu&page=0"]; // 创建历史记录数组 var uri = "submenu.php?submenu=main_menu&page=0"; // 当前需要加载的URI地址 var previous_clicked = uri; // 第一次之前URI的就是现在的 <?php if($client_is_host == true) echo "var client_is_host = true;"; # 自动生成js变量 else echo "var client_is_host = false;"; ?> $(document).ready(function() // 文档加载完毕时运行该函数 { var supportedResolutions=new Array(); // 创建数组 <?php # 从这里可以知道,$supportedResolutions是前面的PHP里的变量,不是这里js中的 # supportedResolutions变量,这个一定要分清楚,要不然很难理解 for($x = 0;$x<count($supportedResolutions);$x++) { # PHP字符串连接的方式很简单,只需要一个(.)就能实现 echo "supportedResolutions[".$x."]="".$supportedResolutions[$x]."";"; } ?> var screenWidth = 0; // 屏幕宽 var screenHeight = 0; // 屏幕高 var iconGridCol = 0; // 图标格点列数 var iconGridRow = 0; // 图标格点行数 // 这里大致意思是取一个合适的尺寸来分配桌面 for(var i=0; i<supportedResolutions.length; i++) { // 是用字符串x字符将字符串切分,x在字符串里的含义是乘,如800x600x4x3 var value = supportedResolutions[i].split('x'); screenWidth = value[0]; screenHeight = value[1]; iconGridCol = value[2]; iconGridRow = value[3]; if(screen.width >= screenWidth && screen.height >= screenHeight) break; } document.cookie="iconGridCol="+iconGridCol; // 通过js创建cookie document.cookie="iconGridRow="+iconGridRow; // 加载对应尺寸的css样式,这样使得显示更合理 $('head').append('<link rel="stylesheet" type="text/css" href="css/'+screenWidth+'x'+screenHeight+'.css" />'); //alert("screenHeight:"+screenWidth+" "+"screenWidth:"+screenHeight); // 本地的Qt程序是无法进行远程传输的,所以会有这个判断 if(client_is_host==false) { var r=confirm("Does your target system have an attached display device? Click Ok and Remote Matrix will assume that a proper display device is attached to your target system. Click Cancel and Remote Matrix will assume that you do not have a display device attached to your target system."); if (r==true) has_graphics = true; else has_graphics = false; } // var uri = "submenu.php?submenu=main_menu&page=0"; // var link_history = ["submenu.php?submenu=main_menu&page=0"]; // 加载显示的html文件,放在complete_container div中 $.get(uri, function(data) { $('#complete_container').html(data); //其实这里的-2没搞清楚,不知道为什么要用这么写 $("#back_link").attr("href",link_history[link_history.length-2]); }); }); // delegate()方法为指定的元素添加一个或多个事件处理程序, // 并规定当这些事件发生时运行的函数 $("#complete_container").delegate("img", "mousedown", function(e) { // preventDefault()方法阻止元素发生默认的行为 // 例如: 当点击提交按钮时阻止表单的提交 e.preventDefault(); }); // 制定complete_container中的a标签的click事件的运行方式 $("#complete_container").delegate("a", "click", function(e) { e.preventDefault(); // 防止事件冒泡到DOM树上,也就是不触发任何前辈元素上的事件处理函数 e.stopPropagation(); var className = $(this).attr('class'); // 获取对应的属性 var idName = $(this).attr('id'); var link = $(this).attr('href'); //Sometimes if a request is taking a long time you might try clicking a link more then once thinking that //your click request was not accepted. This causes multiple request for the same page to be sent which in turn //sometimes results in every link you click causing 2+ request to go through. This code checks to make sure //your requesting a new pageand not the same page twice if(link==previous_clicked) // 防止连续点击两次,也就是避免同一个应用连续运行2次 return false; previous_clicked = link; // 将当前连接看作是上一次的链接 if(idName=="back_link") // 返回上一次链接 { link_history.pop(); // 从堆栈中弹出最后的一次链接 } else if(idName=="main_menu_link") // 转到主页 { link_history = ["submenu.php?submenu=main_menu&page=0"]; } else link_history.push(link); // 将当前的链接加入堆栈 //Adds a random string to the end of the $_GET Query String for page accessed. //This prevents IE from caching the Ajax request. link = link + "&rand="+Math.round((Math.random()*2356))+Math.round((Math.random()*4321))+Math.round((Math.random()*3961)); $.get(link, function(data) { $('#complete_container').html(data); // 往div里添加另一个网页内容 $("#back_link").attr("href",link_history[link_history.length-2]); }); }); </script> </body> </html>