佛典: 佛经html的基本javascript,css文件目录设计(v0.61)
记录一下佛经根目录辅助文件结构:
./
default.js
iphoneapp.css
safariiphone.css
safariipad.css
safariiphone4.css
mobiledefault.css
webdefault.css
IPhone, Cocoa, PHP, Javascript, JQuery, Actionscript, etc…
记录一下佛经根目录辅助文件结构:
./
default.js
iphoneapp.css
safariiphone.css
safariipad.css
safariiphone4.css
mobiledefault.css
webdefault.css
很简单的一个程序,计算从某天到某天一共经历了多少年,多少月,多少日,多少周. 或从某天在某年,某月,某周,某日之后是哪天
<?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="882" height="372" title="DateCounter by Zac@GoldG.net(Zhengliang Guo)"> <fx:Declarations> <!-- Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations> <fx:Script> <![CDATA[ private function ftChanged():void { if(fromDate.selectedDate && toDate.selectedDate){ var gapTime:Number; gapTime = (toDate.selectedDate.getTime() - fromDate.selectedDate.getTime()) / 1000 / 3600 / 24; dd.text = (gapTime).toString(); ww.text = (gapTime/7.0).toString(); yy.text = (gapTime/365.0).toString(); mm.text = (int(gapTime/365) *12 + (toDate.selectedDate.getMonth() - fromDate.selectedDate.getMonth())).toString(); } } private function midChanged(str:String):void { dstY.text = (startDate.selectedDate.getFullYear()).toString(); dstM.text = (startDate.selectedDate.getMonth()+1).toString(); dstD.text = (startDate.selectedDate.getDate()).toString(); if(startDate.selectedDate) { var midTime:Number; if(str == 'y') { midTime = Number(midY.text); resetField2(); midY.text = midTime.toString(); dstY.text = (startDate.selectedDate.getFullYear() + midTime).toString(); } else if(str == 'm') { midTime = Number(midM.text); resetField2(); midM.text = midTime.toString(); if(((startDate.selectedDate.getMonth() + 1 + midTime))>12) { dstY.text = (Number(dstY.text) + int((startDate.selectedDate.getMonth() + 1 + midTime)/12)).toString(); dstM.text = ((startDate.selectedDate.getMonth() + 1 + midTime) % 12).toString(); } else{ dstM.text = (startDate.selectedDate.getMonth() + 1 + midTime).toString(); } } else if(str == 'w') { midTime = Number(midW.text); resetField2(); midW.text = midTime.toString(); var tarDate:Date = new Date(); tarDate.setTime(startDate.selectedDate.getTime() + (midTime * 7 * 24 * 3600 * 1000)); dstY.text = (tarDate.getFullYear()).toString(); dstM.text = (tarDate.getMonth() + 1).toString(); dstD.text = (tarDate.getDate()).toString(); } else if(str == 'd') { midTime = Number(midD.text); resetField2(); midD.text = midTime.toString(); var tarDate:Date = new Date(); tarDate.setTime( startDate.selectedDate.getTime() + (midTime * 24 * 3600 * 1000)); dstY.text = (tarDate.getFullYear()).toString(); dstM.text = (tarDate.getMonth() + 1).toString(); dstD.text = (tarDate.getDate()).toString(); } else if(str == 'c') { resetField2(); } } } private function resetField2():void { midY.text = "0"; midM.text = "0"; midW.text = "0"; midD.text = "0"; } ]]> </fx:Script> <mx:DateChooser id="fromDate" x="27" y="66" change="ftChanged()" showToday="false" /> <mx:DateChooser id="toDate" x="211" y="66" change="ftChanged()" showToday="false" /> <s:Label x="87" y="20" text="From" fontSize="25"/> <s:Label x="276" y="19" text="To" fontSize="25"/> <s:Label x="22" y="280" text="Days" fontSize="20"/> <s:Label x="22" y="319" text="Weeks" fontSize="20"/> <s:Label x="206" y="281" text="Month" fontSize="20"/> <s:Label x="206" y="316" text="Year" fontSize="20"/> <s:Label id="dd" x="96" y="281" text="d"/> <s:Label id="ww" x="96" y="320" text="w"/> <s:Label id="mm" x="272" y="285" text="m"/> <s:Label id="yy" x="272" y="320" text="y"/> <s:Panel x="433" y="10" width="433" height="328" title="Date To Time"> <s:TextInput x="277" y="23" text="0" id="midY" change="midChanged('y')"/> <s:TextInput x="277" y="53" text="0" id="midM" change="midChanged('m')"/> <s:TextInput x="277" y="84" text="0" id="midW" change="midChanged('w')"/> <s:TextInput x="277" y="114" text="0" id="midD" change="midChanged('d')"/> <s:Label id="myy" x="225" y="28" text="Years"/> <s:Label id="mmm" x="225" y="59" text="Month"/> <s:Label id="mww" x="225" y="90" text="Weeks"/> <s:Label id="mdd" x="225" y="119" text="Days"/> <mx:DateChooser id="startDate" x="10" y="10" change="midChanged('c')" showToday="false"/> <s:Label x="47" y="236" text="0000" fontSize="35" id="dstY"/> <s:Label x="158" y="236" text="00" fontSize="35" id="dstM"/> <s:Label x="225" y="236" text="00" fontSize="35" id="dstD"/> </s:Panel> </s:WindowedApplication>
很麻烦… 真有人需要的花, 自己看看吧, 不知道能不能帮上….
南无阿弥陀佛 南无本师释迦牟尼佛 南无药师琉璃光如来
上个文章聊了一下怎么检测iPhone/iPod/iPad, 接下来我们就需要实施CSS了
if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))){ document.write('<link href="iphone.css" rel="stylesheet" type="text/css">'); } if((navigator.userAgent.match(/iPad/i))){ document.write('<link href="ipadwoflash.css" rel="stylesheet" type="text/css">'); }
以上的javascript在检测到是iphone和ipod touch的时候就会写入iphone的css, 在检测到ipad的时候就会使用一个为ipad准备的没有flash的css结构~
南无阿弥陀佛 南无本师释迦牟尼佛 南无药师琉璃光如来
PHP的比较简单可爱:
if (strpos($_SERVER['HTTP_USER_AGENT'],"iPhone")) { echo '在用户代理信息里面如果有iPhone, 执行您的代码'; //别忘了给iPod和iPad也加上去当条件阿~~ }
javascript的也不错,不过我一直不喜欢浪费太多的iPhone资源,不过这回佛典的html文件还是需要使用javascript,因为所有的xml文件都是简单的转换成html,如果再将php搀和进来就很麻烦了
if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))) { document.write(navigator.userAgent); } else { document.write(navigator.userAgent); }
我们可以看一下上面代码的输出:
如果是一台Mac:
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.86 Safari/533.4
如果是一台iPhone:
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9(KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
其实就是找到agent中的典型信息,iPhone这个关键字了.
南无阿弥陀佛 南无本师释迦牟尼佛 南无药师琉璃光如来
XML用处很大… 用得很广… 最简单的来说用PHP和Javascript, JQuery都可以简单解析一个整齐的树结构XML文件
但是我们可爱的佛典网XML为复杂结构, 于是乎xslt帮不上什么忙了……我希望在新版的佛典中能包含所有的佛经, 于是简单并且高效的使用所有中华佛典网上的XML就是我的目标了.
于是,基于事件的XML解析器(Event-Driven XML Parser) NSXMLParser 就是我必须用到的了
继续前面的两篇Mac平台程序设计
Mac:打开一个目录
Mac:得到一个目录内的内容
1, 更改界面, 添加一个”解析一个目录里面的第一个的文件”的按钮
2, 构建XML解析部分
//1, 构建解析方法-(void)parseXMLFile:(NSURL *)XMLURL //XMLURL为第一个文件的URL { NSXMLParser *eventParser = [[NSXMLParser alloc] initWithContentsOfURL:XMLURL]; [eventParser setDelegate:self]; //设置代理为本地 [eventParser parse]; //开始解析 NSLog(@"end Of parseXMLFile"); }
//2, 解析开始后,所有XML的内容由NSXMLParserDelegate处理 // 所以一定要注意在本地添加<NSXMLParserDelegate>到文件头
//在NSXMLParser读到<p>的时候重写一个<p>标签,原来的是XML中的,无法直接使用 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { if ([elementName isEqualToString:@"p"]) { [htmlDataString appendFormat:@"<p>"]; needOrNot = YES; //我们需要<p>和</p>中间的内容,其余的在end中设置NO return; } } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { if(needOrNot) { [htmlDataString appendString:string]; //如上,将需要的字段添加到得到的html结构String中 } } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if ([elementName isEqualToString:@"p"]) { [htmlDataString appendFormat:@"</p>"]; needOrNot = NO; //不需要的内容不允许上面的delegate去读取到htmlDataString中 return; } } - (void)parserDidEndDocument:(NSXMLParser *)parser { NSLog(htmlDataString); //在结束后输出得到的html数据结构. }
这样我就可以对佛典网的复杂结构xml开始分析了, 之后会放出更多对该xml处理的细节
首先是打开一个目录
然后
1, 使用NSFileManager来得到这个目录的内容
NSArray *contentArray = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:[[oPanel URLs] objectAtIndex:0] //oPanel是上个帖子中的NSOpenPanel对象 includingPropertiesForKeys:[NSArray array] options:0 error:nil];
//我们得到一个Array的NSURL2, 简单显示这个Array中的内容
for(id innerUrl in contentArray) { NSLog([innerUrl absoluteString]); }
3, 结果
run
[Switching to process 3626]
Running…
2010-06-17 23:32:43.409 XML2HTML[3626:a0f] file://localhost/Users/kingmtn/Downloads/T01/T01n0001.xml
2010-06-17 23:32:43.411 XML2HTML[3626:a0f] file://localhost/Users/kingmtn/Downloads/T01/T01n0002.xml
2010-06-17 23:32:43.411 XML2HTML[3626:a0f] file://localhost/Users/kingmtn/Downloads/T01/T01n0003.xml
2010-06-17 23:32:43.411 XML2HTML[3626:a0f] file://localhost/Users/kingmtn/Downloads/T01/T01n0004.xml
2010-06-17 23:32:43.411 XML2HTML[3626:a0f] file://localhost/Users/kingmtn/Downloads/T01/T01n0005.xml
2010-06-17 23:32:43.411 XML2HTML[3626:a0f] file://localhost/Users/kingmtn/Downloads/T01/T01n0006.xml
2010-06-17 23:32:43.412 XML2HTML[3626:a0f] file://localhost/Users/kingmtn/Downloads/T01/T01n0007.xml
1, 获得一个打开窗口对象 NSOpenPanel
NSOpenPanel *oPanel = [NSOpenPanel openPanel]; //快捷建立方式不用释放, 我还记得, 你呢?
2, 设置这个对象的参数
[oPanel setCanChooseDirectories:YES]; //可以打开目录 [oPanel setCanChooseFiles:NO]; //不能打开文件(我需要处理一个目录内的所有文件) [oPanel setDirectory:NSHomeDirectory()]; //起始目录为Home
3, 处理得到的数据
if ([oPanel runModal] == NSOKButton) { //如果用户点OK NSLog([[[oPanel URLs] objectAtIndex:0] absoluteString]); //我在console输出这个目录的地址 }
4, 结果
[Switching to process 3330]
Running…
2010-06-17 22:49:02.583 XML2HTML[3330:a0f] file://localhost/Users/kingmtn/Music/
5, 简单的界面

只需要一个NSButton,并且将这个NSButton的缺省行为链接到我的对象方法-(IBAction)openDirectoryButtonClick:(id)sender上就可以了
*这是我XML2HTML工程的第一部分
看着自己原来写的博客还有这么高的浏览量真是惭愧,愧对那些看我博客的朋友. 最近iOS开发功力恢复中,希望尽快恢复佛典的继续开发,不为别的,只为曾经说过.
看自己网站的浏览量是非常开心得事情,当然前题是你的网站流量还满意….
Polaris是一个非常简单的,免费的Google Analytics客户端. 基于Air代表着Mac, Windows都OK. 非常不错得界面,大家试试吧, 懒得登录google的好选择.
处于安全考虑, 应该在WordPress的模板中移除以下语句:
<?php remove_action('wp_head', 'wp_generator'); ?>
这条语句生成正在使用的WP版本
Core i3 530
H55
4GB DDR3
Geforce 8400GS
比我原来的Macbook速度快多了,而且很多都是OOB可用。tony这个名字厉害阿,不仅仅在日本是大神…
http://tonymacx86.blogspot.com/ 上可以学习到很多制作Hackintosh的内容和软件