2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

16
XPages.JP ははははははははははは Lotus ははははは2016 は 6 は 17 は株株株株株株 御御 御御 株株株株株株株株株株 御御 御御

Upload: kazunori-tatsuki

Post on 13-Apr-2017

33 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

XPages.JP はこう作られた!

-テクテク Lotus 技術者夜会-( 2016 年 6 月 17 日)

株式会社エフ 御代 政彦ケートリック株式会社 田付 和慶

Page 2: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

AGENDA

• テーマの選定

• サイトマップ機能

• サンプル APP ギャラリー機能

• 管理機能

• おまけ

Page 3: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

<選定基準>

1. XPAGES だなってバレないクールなデザイン

2. フリーのデザイン テンプレートから探す

3. Bootstrap を標準で搭載

4. FontAwesome を標準で搭載

テーマの選定

そして見つけたのがこちら ↓

Page 4: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

MODERNALicense: freeware

Version: Bootstrap 3.1.0

http://www.bootstrapzero.com/bootstrap-template/moderna

Page 5: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

NSF へのデザインテンプレート流し込み作業 (1)

②CSS 以外のテンプレートの全てのファイルを「 WebContent 」フォルダ内にコピー

「① 「 ナビゲーター」を表示させます

Page 6: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

NSF へのデザインテンプレート流し込み作業(2)

③CSS フォルダ内のファイルは「スタイルシート」内にインポート

スタイルシートはカスタマイズで編集が頻繁に発生するため「スタイルシート」内のほうが便利と判断。

Page 7: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

NSF へのデザインテンプレート流し込み作業(3)

④ ブランクのテーマを作成

XPAGES 標準の OneUI のテーマを無効にするため

⑤ 作成したブランクのテーマを選択

Page 8: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

NSF へのデザインテンプレート流し込み作業(4)

⑥ カスタムコントロールを作り、必要なリソースを読み込ませておくと便利

Page 9: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

NSF へのデザインテンプレート流し込み作業(5)

⑦ XPAGE にサンプルの HTML コードを張り付け実行。 修正・テスト・修正・テスト・・・・

Page 10: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

「環境設定文書」からリンク構造を取得し動的に生成するサイトマップ

サイトマップ機能

Page 11: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

サイトマップのソースコード(1)<div class="sitemapContainer tree"> <xp:repeat id="repeat1" rows="5" var="menu" disableOutputTag="true"> <xp:this.value><![CDATA[#{javascript:var menuList = [];for(var i=1; i<=5; i++){menuList.push(docConfig.getItemValueArray("menus_" + i));}return menuList;}]]></xp:this.value> <xp:text escape="false" id="computedField1“ tagName="div" styleClass="sitemapCategory"> <xp:this.value><![CDATA[#{javascript:var html = [];var topMenu = menu[0].split(",");html.push("<div class='sitemapItem top'");if(topMenu[1] && topMenu[1].trim()){html.push(" data-url='", topMenu[1].trim(), "'");}html.push(">");html.push("<span>", topMenu[0].trim(), "</a>");html.push("</div>");for(var i=1; i<menu.length; i++){var childMenu = menu[i].split(",");html.push("<div class='sitemapItem child1'");if(childMenu[1] && childMenu[1].trim()){html.push(" data-url='", childMenu[1].trim(), "'");}html.push(">");html.push("<span>", childMenu[0].trim(), "</a>");html.push("</div>");}return html.join("");}]]></xp:this.value> </xp:text> </xp:repeat></div>

HTML で生成されるとこんな感じ

Page 12: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

サイトマップのソースコード(2)

function openUrl(url){if(url.match(/^https?:\/\//)){window.open(url);}else{window.location.href = url;}}

function setCategoryHeight(){if($('.sitemapContainer').hasClass('tree')){$('.sitemapCategory').css('height', function(){return (this.children.length * 50 + 60) + "px";});}else{$('.sitemapCategory').css('height', '');}}

$(function(){$('.sitemapItem').on('click', function(e){var url = this.getAttribute("data-url");if(url){openUrl(url);}e.preventDefault();e.stopPropagation();});

$('.sitemapSection').on('click', function(){$('.sitemapContainer').toggleClass('tree');$('.sitemapContainer').toggleClass('circle');setCategoryHeight();});

setCategoryHeight(); });

【 Javascript ファイル】http://xpages.jp/xpagesjp.nsf/sitemap.js

【 CSS ファイル】http://xpages.jp/xpagesjp.nsf/css/sitemap.css

Page 13: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

サンプル APP ギャラリー機能

「ギャラリー文書」からデータを取得して自動生成

Page 14: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

サンプル APP ギャラリーのソースコード

<div class="row"><div class="col-lg-12"><ul class="portfolio-categ filter"><li class="all active"><a href="#"> 全て </a></li><xp:repeat id="repeat2" rows="999" indexVar="idx" var="entryCat"disableOutputTag="true"><xp:this.value><![CDATA[#{javascript:@Unique(@DbColumn("","vPortfolioCat", 1));}]]></xp:this.value><xp:text id="listBox1" tagName="li" styleClass="#{javascript:entryCat}"escape="false"><xp:this.value><![CDATA[#{javascript:"<a href=\"#\">"+entryCat+"</a>"}]]></xp:this.value></xp:text></xp:repeat></ul><div class="clearfix"></div>

<div class="row"><section id="projects"><ul id="thumbs" class="portfolio"><xp:repeat id="repeat1"rows="#{javascript:return compositeData.maxNum || 999;}"value="#{vPortfolios}" indexVar="idx" var="entry"disableOutputTag="true"><xp:text tagName="li" escape="false"styleClass="item-thumbs col-lg-3 design"><xp:this.attrs><xp:attr name="data-id"><xp:this.value><![CDATA[#{javascript:"id-"+@Text(idx)}]]></xp:this.value></xp:attr><xp:attr name="data-type"><xp:this.value><![CDATA[#{javascript:entry.getColumnValues().get(5)}]]></xp:this.value></xp:attr></xp:this.attrs><xp:this.value><![CDATA[#{javascript:var imgUrl = getAttachmentImageURL(entry.getDocument(),"thumbnail");var retVal = '<a class="hover-wrap fancybox" data-fancybox-group="gallery" title="&lt;a target=\'_blank\' href=\''+entry.getDocument().getItemValueString("url")+'\'&gt;'+entry.getColumnValues().get(1)+'&lt;/a&gt;" href="'+imgUrl+'">'+'<span class="overlay-img"></span><span class="overlay-img-thumb font-icon-plus"></span></a>';retVal += '<img class="" style="width:260px; height:195px;" title="" src="'+imgUrl+'" alt="'+entry.getDocument().getItemValueString("description")+'" />';return retVal;}]]></xp:this.value></xp:text></xp:repeat></ul></section></div>

Page 15: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

管理機能

デモをお見せします

Page 16: 2016年06月17日 テクテクlotus技術者夜会「x pages.jp はこう作られた!」

おまけ

1. XPages.JP ドメインは誰が管理しているの?

2. ヘッダーイメージ下の Slack 機能はどうやって実装しているの?