CINXE.COM

(IUCr) Add a meeting

<!DOCTYPE html> <!-- Template Name: Escarine-Edu Author: <a href="http://www.os-templates.com/">OS Templates</a> Author URI: http://www.os-templates.com/ Licence: Free to use under our free template licence terms Licence URI: http://www.os-templates.com/template-terms --> <!-- modified with permission by IUCr --> <html> <head> <script src="https://journals.iucr.org/javascript/analytics.js"></script> <title>(IUCr) Add a meeting</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="DC.title" content="Add a meeting"> <link href="https://www.iucr.org/__data/assets/css_file/0020/129404/fontawesome-4.4.0.min.css?v=0.1.10" rel="stylesheet" type="text/css" media="all"> <link href="https://www.iucr.org/__data/assets/css_file/0006/129399/college-font.css?v=0.1.4" rel="stylesheet" type="text/css" media="all"> <link href="https://www.iucr.org/__data/assets/css_file/0018/129402/framework.css?v=0.1.4" rel="stylesheet" type="text/css" media="all"> <link href="https://www.iucr.org/__data/assets/css_file/0008/129392/layout.css?v=0.1.22" rel="stylesheet" type="text/css" media="all"> <link href="https://www.iucr.org/__data/assets/css_file/0011/129764/iucr.css?v=0.1.206" rel="stylesheet" type="text/css" media="all"> <link href="https://www.iucr.org/__data/assets/css_file/0006/138426/newsletter.css?v=0.1.26" rel="stylesheet" type="text/css" media="all"> <link href="https://www.iucr.org/__data/assets/css_file/0003/147585/slimbox2.css?v=0.0.2" rel="stylesheet" type="text/css" media="all" /> <script src="https://www.iucr.org/__data/assets/js_file/0003/129414/jquery.min.js?v=0.1.1"></script> <script src="https://www.iucr.org/__data/assets/js_file/0006/129417/jquery-ui.min.js?v=0.1.1"></script> <script>function onLoad(){}; /* placeholder - may be replaced by special_scripts */</script> <!-- for timelines --> <script> var Timeline_ajax_url="https://www.iucr.org/__data/iucr/js/timeline_2.3.0/src/ajax/api/simile-ajax-api.js"; var Timeline_urlPrefix='https://www.iucr.org/__data/iucr/js/timeline_2.3.0/src/webapp/api/'; </script> <script src="//www.iucr.org/__data/iucr/js/timeline_2.3.0/src/webapp/api/timeline-api.js" type="text/javascript"> </script> <!-- end of setup for timelines --> </head> <body id="top" onload="onLoad();window.focus();tabberAutomatic();"> <!-- ######################################################################################## --> <!-- ##################### TOP BAR WITH SIGN-IN AND SOCIAL MEDIA ############################ --> <!-- ######################################################################################## --> <div class="wrapper row0"> <div id="topbar" class="clear"> <!-- ######################################################################################## --> <div class="fl_left"> <ul class="nospace inline pushright"> <li>&nbsp;</li> <li><a href="/welcome.html"><img src=https://www.iucr.org/__data/assets/image/0008/130301/IUCr-logo-White.png style="width:23px;" /></a></li> <li><a href="//journals.iucr.org/"><img src=https://www.iucr.org/__data/assets/image/0012/130305/iucr_journals_white.png style="width:22px;" /></a></li> <li><i class="fa fa-user"></i> <a href="https://www.iucr.org/people/login">Login</a></li> </ul> </div> <div class="fl_right"> <ul class="faico clear"> <!-- <li><a href="/cgi-bin/iucrsearch"><img src="https://www.iucr.org/__data/assets/image/0017/150218/search-icon.png"></a></li> --> <li><form method="GET" action="https://www.iucr.org/cgi-bin/iucrsearch" enctype="application/x-www-form-urlencoded" class="form"><input maxlength="200" value="" name="query" class="inlinesearch" type="text" size="16"><input value="Search" name="submit" style="display:none;" type="submit"><br> </form><img src="https://www.iucr.org/__data/assets/image/0017/150218/search-icon.png" style="width:20px;"></li> <li><a class="faicon-facebook" href="https://www.facebook.com/iucr.org"><i class="fa fa-facebook"></i></a></li> <li><a class="faicon-twitter" href="https://twitter.com/IUCr"><i class="fa fa-twitter"></i></a></li> <li><a class="faicon-linkedin" href="https://www.linkedin.com/company/5334871?trk=tyah&trkInfo=clickedVertical%3Acompany%2CclickedEntityId%3A5334871%2Cidx%3A3-1-3%2CtarId%3A1486115202109%2Ctas%3Ainternational%20union%20of%20crystall"><i class="fa fa-linkedin"></i></a></li> <li><a class="faicon-rss" href="https://www.iucr.org/news/rss-feeds"><i class="fa fa-rss"></i></a></li> </ul> </div> <!-- ######################################################################################## --> </div> </div> <!-- ####################################################################################### --> <!-- ##################################### MAIN SITE MENU ################################## --> <!-- ####################################################################################### --> <div class="wrapper row3"> <header id="header" class="hoc clear"> <!-- ######################################################################################## --> <nav id="mainav" class="fl_right"> <ul class="clear"> <li><a class="drop" href="https://www.iucr.org/iucr">The IUCr</a> <ul> <li> <a class="drop" href="https://www.iucr.org/iucr/governance">governance</a> <ul> <li> <a href="https://www.iucr.org/iucr/governance/ga">general assembly</a> </li> <li> <a href="https://www.iucr.org/iucr/governance/ec">executive committee</a> </li> <li> <a href="https://www.iucr.org/iucr/governance/finance.html">finance committee</a> </li> <li> <a href="https://www.iucr.org/iucr/governance/advisory-committees">advisory committees</a> </li> <li> <a href="https://www.iucr.org/iucr/governance/secretariat">secretariat</a> </li> <li> <a href="https://www.iucr.org/iucr/governance/statutes-and-by-laws">statutes and by-laws</a> </li> <li> <a href="https://www.iucr.org/iucr/governance/mediaenquiries">Media Enquiries</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/iucr/ab.html">membership</a> <ul> <li> <a href="https://www.iucr.org/iucr/ab.html/adhering-bodies">adhering bodies</a> </li> <li> <a href="https://www.iucr.org/iucr/ab.html/regional-associates">regional associates</a> </li> <li> <a href="https://www.iucr.org/iucr/ab.html/scientific-associates">scientific associates</a> </li> <li> <a href="https://www.iucr.org/iucr/ab.html/other-bodies">other bodies</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/iucr/commissions">commissions</a> <ul> <li> <a href="https://www.iucr.org/iucr/commissions/principles">principles</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/aperiodic-crystals">aperiodic crystals</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/biological-macromolecules">biological macromolecules</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/crystal-growth">crystal growth and characterization of materials</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/crystallographic-computing">crystallographic computing</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/nomenclature">crystallographic nomenclature</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/teaching">crystallographic teaching</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/art-and-cultural-heritage">crystallography in art and cultural heritage</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/crystallography-of-materials">crystallography of materials</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/diffraction-microstructure-imaging">diffraction microstructure imaging</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/electron-crystallography">electron crystallography</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/high-pressure">high pressure</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/inorganic-and-mineral-structures">inorganic and mineral structures</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/international-tables">international tables</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/journals">journals</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/magnetic-structures">magnetic structures</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/mathematical-and-theoretical-crystallography">mathematical and theoretical crystallography</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/neutron-scattering">neutron scattering</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/nmr-crystallography">nmr crystallography</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/powder-diffraction">powder diffraction</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/quantum-crystallography">quantum crystallography</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/small-angle-scattering">small-angle scattering</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/structural-chemistry">structural chemistry</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/synchrotron-radiation">synchrotron and xfel radiation</a> </li> <li> <a href="https://www.iucr.org/iucr/commissions/xafs">xafs</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/iucr/principles-and-policies">policies</a> </li> <li> <a class="drop" href="https://www.iucr.org/iucr/ewald-prize">ewald prize</a> </li> <li> <a class="drop" href="https://www.iucr.org/iucr/bragg-prize">bragg prize</a> </li> <li> <a class="drop" href="https://www.iucr.org/iucr/struchkov-prize">struchkov prize</a> </li> <li> <a class="drop" href="https://www.iucr.org/iucr/cong">congress</a> <ul> <li> <a href="https://www.iucr.org/iucr/cong/2029-iucr-xxviii">2029 iucr xxviiI</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/2026-iucr-xxvii">2026 iucr xxvii</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/2023-iucr-xxvi">2023 iucr xxvi</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xxv">2021 iucr xxv</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xxiv">2017 iucr xxiv</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xxiii">2014 iucr xxiii</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xxii">2011 iucr xxii</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xxi">2008 iucr xxi</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xx">2005 iucr xx</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xix">2002 iucr xix</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xviii">1999 iucr xviii</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xvii">1996 iucr xvii</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xvi">1993 iucr xvi</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xv">1990 iucr xv</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xiv">1987 iucr xiv</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xiii">1984 iucr xiii</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xii">1981 iucr xii</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-xi">1978 iucr xi</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-x">1975 iucr x</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-ix">1972 iucr ix</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-viii">1969 iucr viii</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-vii">1966 iucr vii</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-vi">1963 iucr vi</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-v">1960 iucr v</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-iv">1957 iucr iv</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-iii">1954 iucr iii</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-ii">1951 iucr ii</a> </li> <li> <a href="https://www.iucr.org/iucr/cong/iucr-i">1948 iucr i</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/iucr/sponsorship">support</a> <ul> <li> <a href="https://www.iucr.org/iucr/sponsorship/vp.html">visiting professorships</a> </li> <li> <a href="https://www.iucr.org/iucr/sponsorship/meetings.html">meetings</a> </li> <li> <a href="https://www.iucr.org/iucr/sponsorship/crystallography-in-africa">africa</a> </li> <li> <a href="https://www.iucr.org/iucr/sponsorship/iucr-outreach-fund">outreach and education</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/iucr/history">history</a> <ul> <li> <a href="https://www.iucr.org/iucr/history/aspects">aspects</a> </li> <li> <a href="https://www.iucr.org/iucr/history/early-history">early history</a> </li> <li> <a href="https://www.iucr.org/iucr/history/journals-history">journals history</a> </li> <li> <a href="https://www.iucr.org/iucr/history/extension">extension</a> </li> <li> <a href="https://www.iucr.org/iucr/history/previous">previous executive committees</a> </li> <li> <a href="https://www.iucr.org/iucr/history/photos">photos of crystallographers</a> </li> <li> <a href="https://www.iucr.org/iucr/history/xray-diffraction">50 years of x-ray diffraction</a> </li> </ul> </li> </ul> </li> <li><a class="drop" href="https://www.iucr.org/news">news</a> <ul> <li> <a class="drop" href="https://www.iucr.org/news/whats-new">what's new</a> <ul> <li> <a href="https://www.iucr.org/news/whats-new/whats-new-by-date">what's new by date</a> </li> <li> <a href="https://www.iucr.org/news/whats-new/announcements2">announcements</a> </li> <li> <a href="https://www.iucr.org/news/whats-new/employment">jobs</a> </li> <li> <a href="https://www.iucr.org/news/whats-new/journal-issues">journal issues</a> </li> <li> <a href="https://www.iucr.org/news/whats-new/meetings">meetings</a> </li> <li> <a href="https://www.iucr.org/news/whats-new/software">software</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/news/newsletter">newsletter</a> <ul> <li> <a href="https://www.iucr.org/news/newsletter/index">index</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/archive">archive</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/editorial-board">editorial board</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-32">volume 32</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-31">volume 31</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-30">volume 30</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-29">volume 29</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-28">volume 28</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-27">volume 27</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-26">volume 26</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-25">volume 25</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-24">volume 24</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-23">volume 23</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-22">volume 22</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-21">volume 21</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-20">volume 20</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-19">volume 19</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-18">volume 18</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-17">volume 17</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-16">volume 16</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-15">volume 15</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-14">volume 14</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-13">volume 13</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-12">volume 12</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-11">volume 11</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-10">volume 10</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-9">volume 9</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-8">volume 8</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-7">volume 7</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-6">volume 6</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-5">volume 5</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-4">volume 4</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-3">volume 3</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-2">volume 2</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/volume-1">volume 1</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/advertise">advertise</a> </li> <li> <a href="https://www.iucr.org/news/newsletter/submit">submit</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/news/announcements">announcements</a> </li> <li> <a class="drop" href="https://www.iucr.org/news/jobs">jobs</a> </li> <li> <a class="drop" href="https://www.iucr.org/news/meetings">meetings</a> </li> <li> <a class="drop" href="https://www.iucr.org/news/meeting-reports">meeting reports</a> <ul> <li> <a href="https://www.iucr.org/news/meeting-reports/21st-iucr-congress">21st iucr congress</a> </li> <li> <a href="https://www.iucr.org/news/meeting-reports/iucr-newsletter">iucr newsletter</a> </li> <li> <a href="https://www.iucr.org/news/meeting-reports/meeting-reports">data-related meetings</a> </li> <li> <a href="https://www.iucr.org/news/meeting-reports/sponsored-meetings">sponsored meetings</a> </li> <li> <a href="https://www.iucr.org/news/meeting-reports/by-country">by country</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/news/rss-feeds">rss feeds</a> </li> </ul> </li> <li><a class="drop" href="https://www.iucr.org/publications">publications</a> <ul> <li> <a class="drop" href="https://www.iucr.org/publications/journals">IUCr Journals</a> <ul> <li> <a href="https://www.iucr.org/publications/journals/acta-a">Acta A</a> </li> <li> <a href="https://www.iucr.org/publications/journals/acta-b">Acta B</a> </li> <li> <a href="https://www.iucr.org/publications/journals/acta-c">Acta C</a> </li> <li> <a href="https://www.iucr.org/publications/journals/acta-d">Acta D</a> </li> <li> <a href="https://www.iucr.org/publications/journals/acta-e">Acta E</a> </li> <li> <a href="https://www.iucr.org/publications/journals/acta-f">Acta F</a> </li> <li> <a href="https://www.iucr.org/publications/journals/iucrj">IUCrJ</a> </li> <li> <a href="https://www.iucr.org/publications/journals/jac">JAC</a> </li> <li> <a href="https://www.iucr.org/publications/journals/jsr">JSR</a> </li> <li> <a href="https://www.iucr.org/publications/journals/iucrdata">IUCrData</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/publications/international-tables-for-crystallography-online">International Tables (online)</a> </li> <li> <a class="drop" href="https://www.iucr.org/publications/international-tables-print">International Tables (print)</a> </li> <li> <a class="drop" href="https://www.iucr.org/publications/newsletter">Newsletter</a> </li> <li> <a class="drop" href="https://www.iucr.org/publications/iucr">IUCr Books</a> </li> <li> <a class="drop" href="https://www.iucr.org/publications/iucr-oup">IUCr/OUP Book Series</a> </li> <li> <a class="drop" href="https://www.iucr.org/publications/other">Other Book Series</a> </li> <li> <a class="drop" href="https://www.iucr.org/publications/teaching-pamphlets">Teaching Pamphlets</a> </li> <li> <a class="drop" href="https://www.iucr.org/publications/springerbriefs-in-crystallography">SpringerBriefs in Crystallography</a> </li> </ul> </li> <li><a class="drop" href="https://www.iucr.org/people">people</a> <ul> <li> <a class="drop" href="https://www.iucr.org/people/wdc">world directory</a> <ul> <li> <a href="https://www.iucr.org/people/wdc/help">help</a> </li> <li> <a href="https://www.iucr.org/people/wdc/ealert">ealerts</a> </li> <li> <a href="https://www.iucr.org/people/wdc/special-offers">special offers</a> </li> <li> <a href="https://www.iucr.org/people/wdc/about">about</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/people/employment">jobs</a> </li> <li> <a class="drop" href="https://www.iucr.org/people/ewald-prize">ewald prize</a> </li> <li> <a class="drop" href="https://www.iucr.org/people/bragg-prize">bragg prize</a> </li> <li> <a class="drop" href="https://www.iucr.org/people/nobel-prize">nobel prize</a> <ul> <li> <a href="https://www.iucr.org/people/nobel-prize/all">all</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/agre">agre</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/anfinsen">anfinsen</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/baker">baker</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/barkla">barkla</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/boyer">boyer</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/w.h.bragg">w.h.bragg</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/w.l.bragg">w.l.bragg</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/brockhouse">brockhouse</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/debroglie">de broglie</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/charpak">charpak</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/compton">compton</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/crick">crick</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/rfcurljr">curl</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/davisson">davisson</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/debye">debye</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/deisenhofer">deisenhofer</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/doudna">doudna</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/geim">geim</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/degennes">de gennes</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/feringa">feringa</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/hauptman">hauptman</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/hodgkin">hodgkin</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/huber2">huber</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/julius">julius</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/karle">karle</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/karplus">karplus</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/kendrew">kendrew</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/klug">klug</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/kobilka">kobilka</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/kornberg">kornberg</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/kroto">kroto</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/laue">laue</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/lefkowitz">lefkowitz</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/m.-levitt">levitt</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/lipscomb">lipscomb</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/mackinnon">mackinnon</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/michel">michel</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/novoselov">novoselov</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/patapoutian">patapoutian</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/pauling">pauling</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/perutz">perutz</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/ramakrishnan">ramakrishnan</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/roentgen">roentgen</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/j.-p.-sauvage">sauvage</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/shechtman">shechtman</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/shull">shull</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/skou">skou</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/smalley">smalley</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/steitz">steitz</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/stoddart">stoddart</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/sumner">sumner</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/thomson">thomson</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/walker">walker</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/a.-warshel">warshel</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/watson">watson</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/wilkins">wilkins</a> </li> <li> <a href="https://www.iucr.org/people/nobel-prize/yonath">yonath</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/people/crystallographers">crystallographers</a> </li> <li> <a class="drop" href="https://www.iucr.org/people/photos">photos</a> </li> <li> <a class="drop" href="https://www.iucr.org/people/associates">associates</a> <ul> <li> <a href="https://www.iucr.org/people/associates/faqs">faqs</a> </li> <li> <a href="https://www.iucr.org/people/associates/joining-fees">fees</a> </li> <li> <a href="https://www.iucr.org/people/associates/corporate">corporate</a> </li> </ul> </li> </ul> </li> <li><a class="drop" href="https://www.iucr.org/resources">resources</a> <ul> <li> <a class="drop" href="https://www.iucr.org/resources/world-directory">world directory</a> </li> <li> <a class="drop" href="https://www.iucr.org/resources/other-directories">other directories</a> <ul> <li> <a href="https://www.iucr.org/resources/other-directories/facilities">facilities</a> </li> <li> <a href="https://www.iucr.org/resources/other-directories/organizations">organizations</a> </li> <li> <a href="https://www.iucr.org/resources/other-directories/software">software</a> </li> <li> <a href="https://www.iucr.org/resources/other-directories/suppliers">suppliers</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/resources/data">data</a> <ul> <li> <a href="https://www.iucr.org/resources/data/databases">databases</a> </li> <li> <a href="https://www.iucr.org/resources/data/datasets">data sets</a> </li> <li> <a href="https://www.iucr.org/resources/data/meeting-reports">data-related meetings</a> </li> <li> <a href="https://www.iucr.org/resources/data/dddwg">dddwg</a> </li> <li> <a href="https://www.iucr.org/resources/data/commdat">commdat</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/resources/cif">cif</a> <ul> <li> <a href="https://www.iucr.org/resources/cif/spec">specification</a> </li> <li> <a href="https://www.iucr.org/resources/cif/documentation">documentation</a> </li> <li> <a href="https://www.iucr.org/resources/cif/software">software</a> </li> <li> <a href="https://www.iucr.org/resources/cif/comcifs">comcifs</a> </li> <li> <a href="https://www.iucr.org/resources/cif/ddl">ddl</a> </li> <li> <a href="https://www.iucr.org/resources/cif/dictionaries">dictionaries</a> </li> <li> <a href="https://www.iucr.org/resources/cif/checkcif">checkcif</a> </li> <li> <a href="https://www.iucr.org/resources/cif/cif2">cif2</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/resources/lists">lists</a> <ul> <li> <a href="https://www.iucr.org/resources/lists/compcomm">compcomm</a> </li> <li> <a href="https://www.iucr.org/resources/lists/teaching-commission">teaching-commission</a> </li> <li> <a href="https://www.iucr.org/resources/lists/epc">epc</a> </li> <li> <a href="https://www.iucr.org/resources/lists/ecacomsig">ecacomsig</a> </li> <li> <a href="https://www.iucr.org/resources/lists/cif-developers">cif-developers</a> </li> <li> <a href="https://www.iucr.org/resources/lists/comcifs">comcifs</a> </li> <li> <a href="https://www.iucr.org/resources/lists/coredmg">coredmg</a> </li> <li> <a href="https://www.iucr.org/resources/lists/corecifchem">corecifchem</a> </li> <li> <a href="https://www.iucr.org/resources/lists/magcif">magcif</a> </li> <li> <a href="https://www.iucr.org/resources/lists/hpc">high-pressure-crystallography</a> </li> <li> <a href="https://www.iucr.org/resources/lists/ddlm-group">ddlm-group</a> </li> <li> <a href="https://www.iucr.org/resources/lists/cif2-encoding">cif2-encoding</a> </li> <li> <a href="https://www.iucr.org/resources/lists/pddmg">pddmg</a> </li> <li> <a href="https://www.iucr.org/resources/lists/imgcif-l">imgcif-l</a> </li> <li> <a href="https://www.iucr.org/resources/lists/sa_scat">sa_scat</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/resources/blogs">blogs</a> <ul> <li> <a href="https://www.iucr.org/resources/blogs/crystal-mathematician">Crystal Mathematician</a> </li> <li> <a href="https://www.iucr.org/resources/blogs/crystallites">Crystallites: news and opinion in crystallography</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/resources/forums">forums</a> </li> <li> <a class="drop" href="https://www.iucr.org/resources/commissions">commissions</a> <ul> <li> <a href="https://www.iucr.org/resources/commissions/aperiodic">aperiodic crystals</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/biological-macromolecules">biological macromolecules</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/crystal-growth">crystal growth and characterization of materials</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/computing">crystallographic computing</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/crystallographic-nomenclature">crystallographic nomenclature</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/crystallographic-teaching">crystallographic teaching</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/crysac">crystallography in art and cultural heritage</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/crystallography-of-materials">crystallography of materials</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/diffraction-microstructure-imaging">diffraction microstructure imaging</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/electron-crystallography">electron crystallography</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/high-pressure">high pressure</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/inorganic">inorganic and mineral structures</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/international-tables">international tables</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/journals">journals</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/magnetic-structures">magnetic structures</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/math">mathematical and theoretical crystallography</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/neutron-scattering">neutron scattering</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/nmr-crystallography">NMR crystallography</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/powder-diffraction">powder diffraction</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/csmd">quantum crystallography</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/small-angle-scattering">small-angle scattering</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/structural-chemistry">structural chemistry</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/synchrotron-radiation">synchrotron radiation</a> </li> <li> <a href="https://www.iucr.org/resources/commissions/xafs">xafs</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/resources/nexus">nexus</a> </li> <li> <a class="drop" href="https://www.iucr.org/resources/symmetry-font">symmetry font</a> </li> </ul> </li> <li><a class="drop" href="https://www.iucr.org/education">education</a> <ul> <li> <a class="drop" href="https://www.iucr.org/education/commission">teaching commission</a> </li> <li> <a class="drop" href="https://www.iucr.org/education/pamphlets">pamphlets</a> <ul> <li> <a href="https://www.iucr.org/education/pamphlets/1">1</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/2">2</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/3">3</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/4">4</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/5">5</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/6">6</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/7">7</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/8">8</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/9">9</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/10">10</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/11">11</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/12">12</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/13">13</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/14">14</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/15">15</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/16">16</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/17">17</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/18">18</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/19">19</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/20">20</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/21">21</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/22">22</a> </li> <li> <a href="https://www.iucr.org/education/pamphlets/23">23</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/education/teaching-resources">teaching resources</a> <ul> <li> <a href="https://www.iucr.org/education/teaching-resources/crystal-growing">crystal growing</a> </li> <li> <a href="https://www.iucr.org/education/teaching-resources/polyhedral-models">polyhedral models</a> </li> <li> <a href="https://www.iucr.org/education/teaching-resources/bragg-lecture-2001">bragg lecture 2001</a> </li> <li> <a href="https://www.iucr.org/education/teaching-resources/symmetry-font">symmetry font</a> </li> <li> <a href="https://www.iucr.org/education/teaching-resources/bernal-essay">bernal essay</a> </li> <li> <a href="https://www.iucr.org/education/teaching-resources/lonsdale-lecture-2011">lonsdale lecture 2011</a> </li> <li> <a href="https://www.iucr.org/education/teaching-resources/erice-2011">erice 2011</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/education/online-dictionary">online dictionary</a> </li> <li> <a class="drop" href="https://www.iucr.org/education/resources">web resources</a> <ul> <li> <a href="https://www.iucr.org/education/resources/archived">archived</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/education/young-scientists">young scientists</a> <ul> <li> <a href="https://www.iucr.org/education/young-scientists/how-to-publish">how to publish</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/education/presentations">presentations</a> <ul> <li> <a href="https://www.iucr.org/education/presentations/crystallography-and-sustainability">crystallography and sustainability</a> </li> </ul> </li> </ul> </li> <li><a class="drop" href="https://www.iucr.org/outreach">outreach</a> <ul> <li> <a class="drop" href="https://www.iucr.org/outreach/crystallography-around-the-world">crystallography around the world</a> </li> <li> <a class="drop" href="https://www.iucr.org/outreach/openlabs">openlabs</a> <ul> <li> <a href="https://www.iucr.org/outreach/openlabs/calendar">calendar</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-kenya">Bruker OpenLab Kenya</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/laaamp-bruker-openlab-benin-2">LAAAMP Bruker OpenLab Benin 2</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-congo-brazzavill">Bruker OpenLab Congo-Brazzaville</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/laaamp-bruker-openlab-benin">LAAAMP Bruker OpenLab Benin</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-ghana-2">Bruker OpenLab Ghana</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/malvern-panalytical-openlab-turkey-2">Malvern Panalytical OpenLab Turkey 2</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/openlab-ivory-coast">Bruker OpenLab Côte d'Ivoire</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/openlab-costa-rica">LAAMP OpenLab Costa Rica</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/iucr-iupap-ictp-openlab-senegal">IUCr-IUPAP-ICTP OpenLab Senegal</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-cameroon">Bruker OpenLab Cameroon</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/rigaku-openlab-bolivia">Rigaku OpenLab Bolivia</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-albania">Bruker OpenLab Albania</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-uruguay-2">Bruker OpenLab Uruguay 2</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/rigaku-openlab-cambodia-2">Rigaku OpenLab Cambodia 2</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-vietnam-2">Bruker OpenLab Vietnam 2</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-senegal">Bruker OpenLab Senegal</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/panalytical-openlab-mexico-2">PANalytical OpenLab Mexico 2</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/ccdc-openlab-kenya">CCDC OpenLab Kenya</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-tunisia">Bruker OpenLab Tunisia</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-algeria">Bruker OpenLab Algeria</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/panalytical-openlab-turkey">PANalytical OpenLab Turkey</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-vietnam">Bruker OpenLab Vietnam</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/agilent-openlab-hong-kong">Agilent OpenLab Hong Kong</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/panalytical-openlab-mexico">PANalytical OpenLab Mexico</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/rigaku-openlab-colombia">Rigaku OpenLab Colombia</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/grenoble-darmstadt">grenoble-darmstadt</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/agilent-openlab-turkey">Agilent OpenLab Turkey</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-indonesia">Bruker OpenLab Indonesia</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-uruguay">Bruker OpenLab Uruguay</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/rigaku-openlab-cambodia">Rigaku OpenLab Cambodia</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/panalytical-openlab-ghana">PANalytical OpenLab Ghana</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-morocco">Bruker OpenLab Morocco</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/agilent-openlab-argentina">Agilent OpenLab Argentina</a> </li> <li> <a href="https://www.iucr.org/outreach/openlabs/bruker-openlab-pakistan">Bruker OpenLab Pakistan</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/outreach/crystal-growing-competition">crystal growing competition</a> <ul> <li> <a href="https://www.iucr.org/outreach/crystal-growing-competition/submit-entry">submit entry</a> </li> </ul> </li> <li> <a class="drop" href="https://www.iucr.org/outreach/africa">initiative in africa</a> </li> <li> <a class="drop" href="https://www.iucr.org/outreach/laamp">LAAAMP</a> </li> <li> <a class="drop" href="https://www.iucr.org/outreach/icsu2015">IUCr-ICSU 2015</a> </li> <li> <a class="drop" href="https://www.iucr.org/outreach/fund">outreach and education fund</a> </li> <li> <a class="drop" href="https://www.iucr.org/outreach/iycr">iycr2014</a> </li> </ul> </li> </ul> </nav> <!-- ######################################################################################## --> </header> </div> <!-- ######################################################################################## --> <!-- ########################### WELCOME BANNER WITH IMAGE ################################## --> <!-- ######################################################################################## --> <!-- ######################################################################################## --> <div class="wrapper bgded overlay" style="background-image:url('/cgi-bin/getiucrphoto.php?ms=associates&no=48');"> <div id="pagetitle" class="hoc clear"> <div id="logo" class="fl_left"><a href="https://www.iucr.org/calendar/calendar-of-events"><img src="https://www.iucr.org/__data/assets/image/0008/130301/IUCr-logo-White.png" alt="[IUCr logo]" title="[Meetings Calendar]" style="width:66px;margin-top:-28px;margin-right: 24px;margin-bottom:6px;" /></a></div><a href="https://www.iucr.org/calendar/calendar-of-events" title="[Meetings Calendar]"><h2>Meetings Calendar</h2></a></div></div> <!-- ######################################################################################## --> <!-- ######################################################################################## --> <!-- ############################## LIST OF MINISITES ####################################### --> <!-- ######################################################################################## --> <!-- ######################################################################################## --> <!-- ######################################################################################## --> <!-- ######################################################################################## --> <!-- ##################################### BREADCRUMB ####################################### --> <!-- ######################################################################################## --> <!-- start of breadcrumb --> <div id="breadcrumb"> <a href="https://www.iucr.org">iucr</a> &nbsp;&gt;&nbsp; <a href="https://www.iucr.org/calendar">calendar</a> &nbsp;&gt;&nbsp; <a href="https://www.iucr.org/calendar/etc">etc</a> &nbsp;&gt;&nbsp; <a href="https://www.iucr.org/calendar/etc/add-meeting">add-meeting</a> </div> <!-- end of breadcrumb --> <!-- ######################################################################################## --> <!-- #################################### MINISITES MENU #################################### --> <!-- ######################################################################################## --> <!-- ######################################################################################## --> <!-- ###################################################################################### --> <!-- ##################################### MAIN BODY ###################################### --> <!-- ###################################################################################### --> <div class="wrapper row3" id="page_body"> <main class="hoc container clear"> <!-- ############################### MESSAGE OF THE DAY OR OTHER HEADLINE ################# --> <div class="motd"> </div> <!-- ########################################## MAIN PAGE CONTENT ######################### --> <div class="clear"> <!-- Left sidebar hosts a navigation menu --> <!-- iucr indexable content starts here --> <div id="_layout_34Q" class="content three_quarter first"></div> <div id="_layout_34" class="content three_quarter"></div> <div id="_layout_full" class="content"> <form id="page_asset_builder_119982" method="post" action="https://www.iucr.org/calendar/etc/add-meeting?" enctype="multipart/form-data" onsubmit="return form_on_submit()"> <input type="hidden" name="AB_119982_ASSET_BUILDER_ACTION" value="create" class="sq-form-field" id="AB_119982_ASSET_BUILDER_ACTION" /> <div id="content_div_72175"> <script type="text/javascript" src="https://www.iucr.org/__lib/html_form/html_form.js"></script> <script type="text/javascript" src="https://www.iucr.org/__lib/js/general.js"></script> <script type="text/javascript" src="https://www.iucr.org/__lib/js/debug.js"></script> <script type="text/javascript" src="https://www.iucr.org/__lib/js/edit.js"></script> <script type="text/javascript" src="https://www.iucr.org/__lib/js/translation.js"></script> <script type="text/javascript" src="https://www.iucr.org/__data/system/core/js_strings.en.js"></script> <script type="text/javascript"><!-- //<![CDATA[ // slip our own onLoad function into the onLoad event of the window var SQ_DOCUMENT_LOADED = false; function page_on_load() { // let everyone know the document is loaded SQ_DOCUMENT_LOADED = true; }// end page_on_load() function print_tooltip() { if (window.self.name == 'sq_main') { tooltip.print(); } } var SQ_FORM_SUBMITTED = false; function form_on_submit() { if (SQ_FORM_SUBMITTED) { alert(js_translate('form_already_submitted')); return; } // basically if they get this far then we can submit SQ_FORM_SUBMITTED = true; return true; }//end form_on_submit() //]]> --> </script> <input type="hidden" name="AB_119982_ASSET_BUILDER_CREATE_TYPE" value="calendar_event_single" class="sq-form-field" id="AB_119982_ASSET_BUILDER_CREATE_TYPE" /><input type="hidden" name="asset_action" value="create_custom" class="sq-form-field" id="asset_action" /><div class="sq-asset-builder-tab-content" id="page_asset_builder_119982_type_calendar_event_single" style="display: block"><style type="text/css"> div#add_meeting { font-family: verdana, arial, sans-serif; font-size: 80%; } label, input, textarea, select, button { display: inline-flex; } input[type="checkbox"]+label { display: inline-flex !important; vertical-align: top; width: 16%; max-width:250px; margin-right:6px; margin-left:2px; } p.autofill { display: none; } br { display: none; } label+br:nth-child(5n+5) { display: block; } td.dateselector table +table {position: relative; } td.dateselector table +table tr td +td {visibility: hidden;} td.dateselector table +table tr {height: 1em;} td.dateselector table +table tr +tr {position: absolute; top: 0; left:5em; } td.dateselector table +table tr +tr td +td {visibility: visible;} #checkcal { display: none; padding: 10px; background-color: #eee; right: 0px !important; min-height:120px; min-width:400px; } #checkgal { display: none; padding: 10px; background-color: #eee; right: 0px !important; } </style> <div id="add_meeting"> <h1>Add a meeting to the IUCr calendar</h1> <hr /> <p style="text-align:right;color: rgb(102, 102, 102); font-family: verdana, arial, sans-serif; font-size: 11.2px;">If this is the first time you have used this form, please <a href="https://www.iucr.org/calendar/etc/add-meeting/how-to" target="_blank">click here</a> for full instructions (opens in new window).</p> <form> <h3>1. Specify the date(s)</h3> <table cellpadding="3"> <tbody> <tr> <td>Start date:</td> <td><input type="text" id="start" /></td> <td>End date:</td> <td><input type="text" id="finish" /></td> <td><a onclick="toggle('squizdate');">&nbsp;[Click here to enter a specific time]</a></td> </tr> </tbody> </table> <div id="squizdate" style="display:none;"> <table cellpadding="3"> <tbody> <tr> <td class="dateselector" id="_td4_1" valign="top"> <script type="text/javascript" src="https://www.iucr.org/__data/asset_types/calendar_event/js/date_chooser.js"></script> <!-- start --> <table border="0" cellpadding="0" cellspacing="0" style="margin-bottom: 1ex"> <tr> <td class="sq-backend-data" style="vertical-align: bottom; white-space: nowrap">&nbsp;Occurs on&nbsp; <input class="sq-form-field" style="width: 5ex" type="text" name="calendar_event_single_0_start_day" id="calendar_event_single_0_start_day" size="2" value="28" onkeypress="processKeyEvent(this)" onfocus="currentField=this" onblur="currentField=null; oldField=this; setTimeout('processStartDateBlur(oldField, \'calendar_event_single_0\')', 10);" /> <select class="sq-form-field" name="calendar_event_single_0_start_month" id="calendar_event_single_0_start_month" onkeypress="processKeyEvent(this)" onfocus="currentField=this" onblur="currentField=null; oldField=this; setTimeout('processStartDateBlur(oldField, \'calendar_event_single_0\')', 10);"> <option value="1">Jan</option> <option value="2">Feb</option> <option value="3">Mar</option> <option value="4">Apr</option> <option value="5">May</option> <option value="6">Jun</option> <option value="7">Jul</option> <option value="8">Aug</option> <option value="9">Sep</option> <option value="10">Oct</option> <option selected="selected" value="11">Nov</option> <option value="12">Dec</option> </select> <input class="sq-form-field" type="text" name="calendar_event_single_0_start_year" id="calendar_event_single_0_start_year" size="5" value="2024" onkeypress="processKeyEvent(this)" onfocus="currentField=this" onblur="currentField=null; oldField=this; setTimeout('processStartDateBlur(oldField, \'calendar_event_single_0\')', 10);" /> </td> <td class="sq-backend-data" style="white-space: nowrap"> &nbsp;&nbsp; <input class="sq-form-field" type="checkbox" value="1" name="calendar_event_single_0_start_time_enabled" id="calendar_event_single_0_start_time_enabled" onclick="if (this.checked) { enableTimeField('calendar_event_single_0_start'); } else { disableTimeField('calendar_event_single_0_start'); } if (isChecked('calendar_event_single_0_end_enabled')) { if (this.checked) enableTimeField('calendar_event_single_0_end'); else disableTimeField('calendar_event_single_0_end'); } else { if (this.checked) { checkBox('calendar_event_single_0_end_time_enabled'); } else { uncheckBox('calendar_event_single_0_end_time_enabled'); } } " />at <input class="sq-form-field" style="width: 5ex" type="text" name="calendar_event_single_0_start_hours" id="calendar_event_single_0_start_hours" size="2" maxlength="2" value="11" onkeypress="processKeyEvent(this)" onfocus="currentField=this" onblur="currentField=null; oldField=this; setTimeout('processStartDateBlur(oldField, \'calendar_event_single_0\')', 10);" disabled="disabled" /> : <input class="sq-form-field" style="width: 5ex" type="text" name="calendar_event_single_0_start_minutes" id="calendar_event_single_0_start_minutes" size="2" maxlength="2" value="10" onkeypress="processKeyEvent(this)" onfocus="currentField=this" onblur="currentField=null; oldField=this; setTimeout('processStartDateBlur(oldField, \'calendar_event_single_0\')', 10);" disabled="disabled" /> <select class="sq-form-field" name="calendar_event_single_0_start_is_pm" id="calendar_event_single_0_start_is_pm" onkeypress="processKeyEvent(this)" onfocus="currentField=this" onblur="currentField=null; oldField=this; setTimeout('processStartDateBlur(oldField, \'calendar_event_single_0\')', 10);" disabled="disabled" > <option value="0" selected="selected" >am</option> <option value="1" >pm</option> </select> </td> </tr> </table> <!-- end --> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td class="sq-backend-data" style="white-space: nowrap"> <input name="calendar_event_single_0_end_enabled" id="calendar_event_single_0_end_enabled" type="checkbox" onclick="processEndClick(this, 'calendar_event_single_0');"/>&nbsp;runs&nbsp; </td> <!-- duration --> <td class="sq-backend-data" style="white-space: nowrap"> <input type="radio" value="duration" id="calendar_event_single_0_duration_enabled" name="calendar_event_single_0_end_type" checked="checked" disabled="disabled" /> for </td> <td colspan="2" class="sq-backend-data" style="white-space: nowrap"> <input type="text" name="calendar_event_single_0_duration" value="" size="2" onclick="checkBox('calendar_event_single_0_duration_enabled'); checkBox('calendar_event_single_0_start_time_enabled'); enableTimeField('calendar_event_single_0_start');" onblur="updateDurationValuesByPrefix('calendar_event_single_0')" disabled="disabled" class="sq-form-field" id="calendar_event_single_0_duration" /><select name="calendar_event_single_0_duration_units" onclick="checkBox('calendar_event_single_0_duration_enabled'); checkBox('calendar_event_single_0_start_time_enabled'); enableTimeField('calendar_event_single_0_start');" onblur="updateDurationValuesByPrefix('calendar_event_single_0')" disabled="disabled" class="sq-form-field" id="calendar_event_single_0_duration_units"><option value="i" selected="selected">minutes</option><option value="h">hours</option><option value="d">days</option></select> </td> </tr> <tr> <td>&nbsp;</td> <!-- end date --> <td class="sq-backend-data" style="white-space: nowrap"> <input type="radio" value="date" id="calendar_event_single_0_end_date_enabled" name="calendar_event_single_0_end_type" disabled="disabled" /> until &nbsp; </td> <td class="sq-backend-data" style="white-space: nowrap"> <input class="sq-form-field" style="width: 5ex" type="text" name="calendar_event_single_0_end_day" id="calendar_event_single_0_end_day" size="2" value="28" onclick="checkBox('calendar_event_single_0_end_date_enabled');" onkeypress="processKeyEvent(this)" onfocus="currentField=this" onblur="currentField=null; oldField=this; setTimeout('processEndDateBlur(oldField, \'calendar_event_single_0\')', 10);" disabled="disabled" /> <select class="sq-form-field" name="calendar_event_single_0_end_month" id="calendar_event_single_0_end_month" onclick="checkBox('calendar_event_single_0_end_date_enabled');" onkeypress="processKeyEvent(this)" onfocus="currentField=this" onblur="currentField=null; oldField=this; setTimeout('processEndDateBlur(oldField, \'calendar_event_single_0\')', 10);" disabled="disabled"> <option value="1">Jan</option> <option value="2">Feb</option> <option value="3">Mar</option> <option value="4">Apr</option> <option value="5">May</option> <option value="6">Jun</option> <option value="7">Jul</option> <option value="8">Aug</option> <option value="9">Sep</option> <option value="10">Oct</option> <option selected="selected" value="11">Nov</option> <option value="12">Dec</option> </select> <input class="sq-form-field" type="text" name="calendar_event_single_0_end_year" id="calendar_event_single_0_end_year" size="5" value="2024" onclick="checkBox('calendar_event_single_0_end_date_enabled');" onkeypress="processKeyEvent(this)" onfocus="currentField=this" onblur="currentField=null; oldField=this; setTimeout('processEndDateBlur(oldField, \'calendar_event_single_0\')', 10);" disabled="disabled" /> </td> <td class="sq-backend-data" style="white-space: nowrap"> &nbsp;&nbsp; <input class="sq-form-field" type="checkbox" value="1" name="calendar_event_single_0_end_time_enabled" id="calendar_event_single_0_end_time_enabled" onclick="if (this.checked) { enableTimeField('calendar_event_single_0_end'); } else { disableTimeField('calendar_event_single_0_end'); } if (this.checked) { checkBox('calendar_event_single_0_end_date_enabled'); enableTimeField('calendar_event_single_0_start'); } else disableTimeField('calendar_event_single_0_start');" disabled="disabled" />at <input class="sq-form-field" style="width: 5ex" type="text" name="calendar_event_single_0_end_hours" id="calendar_event_single_0_end_hours" size="2" maxlength="2" value="11" onclick="checkBox('calendar_event_single_0_end_date_enabled');" onkeypress="processKeyEvent(this)" onfocus="currentField=this" onblur="currentField=null; oldField=this; setTimeout('processEndDateBlur(oldField, \'calendar_event_single_0\')', 10);" disabled="disabled" /> : <input class="sq-form-field" style="width: 5ex" type="text" name="calendar_event_single_0_end_minutes" id="calendar_event_single_0_end_minutes" size="2" maxlength="2" value="10" onclick="checkBox('calendar_event_single_0_end_date_enabled');" onkeypress="processKeyEvent(this)" onfocus="currentField=this" onblur="currentField=null; oldField=this; setTimeout('processEndDateBlur(oldField, \'calendar_event_single_0\')', 10);" disabled="disabled" /> <select class="sq-form-field" name="calendar_event_single_0_end_is_pm" id="calendar_event_single_0_end_is_pm" onclick="checkBox('calendar_event_single_0_end_date_enabled');" onkeypress="processKeyEvent(this)" onfocus="currentField=this" onblur="currentField=null; oldField=this; setTimeout('processEndDateBlur(oldField, \'calendar_event_single_0\')', 10);" disabled="disabled" > <option value="0" selected="selected" >am</option> <option value="1" >pm</option> </select> </td> </tr> </table> <input type="hidden" name="calendar_event_single_0_start_end_chooser_printed" value="1" class="sq-form-field" id="calendar_event_single_0_start_end_chooser_printed" /></td> </tr> </tbody> </table> </div> <h3>2. Select a country</h3> <p><select name="countries" class="sq-form-field" id="countries"><option value="120052">Select from the drop-down list</option><option value="89545">Afghanistan</option><option value="89467">Albania</option><option value="89565">Algeria</option><option value="89589">American Samoa</option><option value="89548">Andorra</option><option value="89606">Angola</option><option value="89557">Anguilla</option><option value="89611">Antarctica</option><option value="89462">Antigua and Barbuda</option><option value="89420">Argentina</option><option value="89476">Armenia</option><option value="89463">Aruba</option><option value="89414">Australia</option><option value="89435">Austria</option><option value="89645">Azerbaijan</option><option value="89521">Bahamas</option><option value="89430">Bahrain</option><option value="89509">Bangladesh</option><option value="89447">Barbados</option><option value="89566">Belarus</option><option value="89539">Belgium</option><option value="89488">Belize</option><option value="89472">Benin</option><option value="89563">Bermuda</option><option value="89538">Bhutan</option><option value="89499">Bolivia</option><option value="89496">Bosnia and Herzegowina</option><option value="89541">Botswana</option><option value="89515">Bouvet Island</option><option value="89620">Brazil</option><option value="89550">British Indian Ocean Territory</option><option value="89424">Brunei Darussalam</option><option value="89419">Bulgaria</option><option value="89493">Burkina Faso</option><option value="89422">Burundi</option><option value="89524">Cambodia</option><option value="89530">Cameroon</option><option value="89535">Canada</option><option value="89527">Cape Verde</option><option value="89568">Cayman Islands</option><option value="89650">Central African Republic</option><option value="89596">Chad</option><option value="89537">Chile</option><option value="89477">China</option><option value="89504">Christmas Island</option><option value="89458">Cocos (Keeling) Islands</option><option value="89465">Colombia</option><option value="89643">Comoros</option><option value="89549">Congo</option><option value="89423">Cook Islands</option><option value="89482">Costa Rica</option><option value="89500">Cote d'Ivoire</option><option value="89648">Croatia</option><option value="89542">Cuba</option><option value="89561">Cyprus</option><option value="89452">Czech Republic</option><option value="89554">Democratic People's Republic of Korea</option><option value="89519">Democratic Republic of the Congo</option><option value="89595">Denmark</option><option value="89615">Djibouti</option><option value="89622">Dominica</option><option value="89427">Dominican Republic</option><option value="89507">East Timor</option><option value="89627">Ecuador</option><option value="89534">Egypt</option><option value="89426">El Salvador</option><option value="89484">Equatorial Guinea</option><option value="89494">Eritrea</option><option value="89574">Estonia</option><option value="89575">Ethiopia</option><option value="89474">Falkland Islands</option><option value="89618">Faroe Islands</option><option value="89649">Federated States of Micronesia</option><option value="89437">Fiji</option><option value="89429">Finland</option><option value="89564">North Macedonia</option><option value="89425">France</option><option value="89469">French Guiana</option><option value="89502">French Polynesia</option><option value="89580">French Southern Territories</option><option value="89418">Gabon</option><option value="89646">Gambia</option><option value="89577">Georgia</option><option value="89455">Germany</option><option value="89639">Ghana</option><option value="89546">Gibraltar</option><option value="89612">Greece</option><option value="89579">Greenland</option><option value="89495">Grenada</option><option value="89607">Guadeloupe</option><option value="89621">Guam</option><option value="89475">Guatemala</option><option value="89608">Guinea</option><option value="89497">Guinea-Bissau</option><option value="89513">Guyana</option><option value="89506">Haiti</option><option value="89552">Heard and McDonald Islands</option><option value="89555">Honduras</option><option value="89517">Hong Kong</option><option value="89634">Hungary</option><option value="89456">Iceland</option><option value="89570">India</option><option value="89485">Indonesia</option><option value="89412">Iran</option><option value="89544">Iraq</option><option value="89522">Ireland</option><option value="89585">Israel</option><option value="89518">Italy</option><option value="89520">Jamaica</option><option value="89411">Japan</option><option value="89428">Jordan</option><option value="89489">Kazakhstan</option><option value="89468">Kenya</option><option value="89623">Kiribati</option><option value="151566">Kosovo</option><option value="89532">Kuwait</option><option value="89598">Kyrgyzstan</option><option value="89591">Lao People's Democratic Republic</option><option value="89605">Latvia</option><option value="89584">Lebanon</option><option value="89443">Lesotho</option><option value="89594">Liberia</option><option value="89636">Libyan Arab Jamahiriya</option><option value="89434">Liechtenstein</option><option value="89451">Lithuania</option><option value="89624">Luxembourg</option><option value="89571">Macau</option><option value="89569">Madagascar</option><option value="89415">Malawi</option><option value="89460">Malaysia</option><option value="89492">Maldives</option><option value="89448">Mali</option><option value="89617">Malta</option><option value="89432">Marshall Islands</option><option value="89573">Martinique</option><option value="89597">Mauritania</option><option value="89625">Mauritius</option><option value="89490">Mayotte</option><option value="89523">Mexico</option><option value="89562">Monaco</option><option value="89473">Mongolia</option><option value="89441">Montenegro</option><option value="89604">Montserrat</option><option value="89479">Morocco</option><option value="89431">Mozambique</option><option value="89433">Myanmar</option><option value="89558">Namibia</option><option value="89647">Nauru</option><option value="89616">Nepal</option><option value="89642">Netherlands</option><option value="89470">Netherlands Antilles</option><option value="89486">New Caledonia</option><option value="89416">New Zealand</option><option value="89440">Nicaragua</option><option value="89421">Niger</option><option value="89644">Nigeria</option><option value="89601">Niue</option><option value="89438">Norfolk Island</option><option value="153032">North Macedonia</option><option value="89633">Northern Mariana Islands</option><option value="89471">Norway</option><option value="89576">Oman</option><option value="89582">Pakistan</option><option value="89461">Palau</option><option value="89588">Palestinian Territories</option><option value="89638">Panama</option><option value="89516">Papua New Guinea</option><option value="89413">Paraguay</option><option value="89510">Peru</option><option value="89593">Philippines</option><option value="89543">Pitcairn</option><option value="89449">Poland</option><option value="89637">Portugal</option><option value="89610">Puerto Rico</option><option value="89512">Qatar</option><option value="89480">Republic of Korea</option><option value="89560">Republic of Moldova</option><option value="89491">Reunion</option><option value="89501">Romania</option><option value="89581">Russian Federation</option><option value="89454">Rwanda</option><option value="89613">Saint Kitts and Nevis</option><option value="89614">Saint Lucia</option><option value="89603">Saint Vincent and the Grenadines</option><option value="89626">Samoa</option><option value="89483">San Marino</option><option value="89417">Sao Tome and Principe</option><option value="89498">Saudi Arabia</option><option value="89600">Senegal</option><option value="89528">Serbia</option><option value="89505">Seychelles</option><option value="89529">Sierra Leone</option><option value="89628">Singapore</option><option value="89640">Slovakia (Slovak Republic)</option><option value="89590">Slovenia</option><option value="89629">Solomon Islands</option><option value="89556">Somalia</option><option value="89630">South Africa</option><option value="89464">South Georgia and the South Sandwich Islands</option><option value="89587">South Sudan</option><option value="89453">Spain</option><option value="89445">Sri Lanka</option><option value="89514">St Helena</option><option value="89583">St Pierre and Miquelon</option><option value="89553">Sudan</option><option value="89635">Suriname</option><option value="89641">Svalbard and Jan Mayen Islands</option><option value="89533">Swaziland</option><option value="89540">Sweden</option><option value="89446">Switzerland</option><option value="89531">Syrian Arab Republic</option><option value="89602">Taiwan</option><option value="89651">Tajikistan</option><option value="89592">Thailand</option><option value="89442">Togo</option><option value="89459">Tokelau</option><option value="89559">Tonga</option><option value="89444">Trinidad and Tobago</option><option value="89547">Tunisia</option><option value="89567">Turkey</option><option value="89619">Turkmenistan</option><option value="89508">Turks and Caicos Islands</option><option value="89536">Tuvalu</option><option value="89525">Uganda</option><option value="89599">Ukraine</option><option value="89526">United Arab Emirates</option><option value="89481">United Kingdom</option><option value="89572">United Republic of Tanzania</option><option value="89450">United States</option><option value="89551">United States Minor Outlying Islands</option><option value="89631">Uruguay</option><option value="89466">Uzbekistan</option><option value="89457">Vanuatu</option><option value="89478">Vatican City</option><option value="89511">Venezuela</option><option value="89586">Vietnam</option><option value="89609">Virgin Islands (British)</option><option value="89503">Virgin Islands (US)</option><option value="89632">Wallis and Futuna Islands</option><option value="89439">Western Sahara</option><option value="89436">Yemen</option><option value="89578">Zambia</option><option value="89487">Zimbabwe</option><option value="91217">Virtual</option></select></p> <p class="autofill">Specify country: <input type="text" name="metadata_field_text_90234_calendar_event_single_value" value="" size="30" class="sq-form-field" id="metadata_field_text_90234_calendar_event_single_value" /></p> <h3>3. Select one or more topics</h3> <p><input type="checkbox" name="topics[89726]" value="89726" id="topics[89726]" class="sq-form-field" /><label for="topics[89726]">Accelerators</label><br /><input type="checkbox" name="topics[89734]" value="89734" id="topics[89734]" class="sq-form-field" /><label for="topics[89734]">Aperiodic crystallography</label><br /><input type="checkbox" name="topics[89699]" value="89699" id="topics[89699]" class="sq-form-field" /><label for="topics[89699]">Applied crystallography</label><br /><input type="checkbox" name="topics[89713]" value="89713" id="topics[89713]" class="sq-form-field" /><label for="topics[89713]">Art and history</label><br /><input type="checkbox" name="topics[89719]" value="89719" id="topics[89719]" class="sq-form-field" /><label for="topics[89719]">Biological macromolecules</label><br /><input type="checkbox" name="topics[89706]" value="89706" id="topics[89706]" class="sq-form-field" /><label for="topics[89706]">Characterisation of materials</label><br /><input type="checkbox" name="topics[89725]" value="89725" id="topics[89725]" class="sq-form-field" /><label for="topics[89725]">Charge, spin and momentum densities</label><br /><input type="checkbox" name="topics[89735]" value="89735" id="topics[89735]" class="sq-form-field" /><label for="topics[89735]">Chemical crystallography</label><br /><input type="checkbox" name="topics[89722]" value="89722" id="topics[89722]" class="sq-form-field" /><label for="topics[89722]">Computing</label><br /><input type="checkbox" name="topics[115573]" value="115573" id="topics[115573]" class="sq-form-field" /><label for="topics[115573]">Cryo electron microscopy</label><br /><input type="checkbox" name="topics[89704]" value="89704" id="topics[89704]" class="sq-form-field" /><label for="topics[89704]">Crystal engineering</label><br /><input type="checkbox" name="topics[89717]" value="89717" id="topics[89717]" class="sq-form-field" /><label for="topics[89717]">Crystal growth</label><br /><input type="checkbox" name="topics[89711]" value="89711" id="topics[89711]" class="sq-form-field" /><label for="topics[89711]">Crystal physics</label><br /><input type="checkbox" name="topics[89718]" value="89718" id="topics[89718]" class="sq-form-field" /><label for="topics[89718]">Data analysis</label><br /><input type="checkbox" name="topics[152451]" value="152451" id="topics[152451]" class="sq-form-field" /><label for="topics[152451]">Diffraction microstructure imaging</label><br /><input type="checkbox" name="topics[89709]" value="89709" id="topics[89709]" class="sq-form-field" /><label for="topics[89709]">Electron crystallography</label><br /><input type="checkbox" name="topics[89729]" value="89729" id="topics[89729]" class="sq-form-field" /><label for="topics[89729]">Free-electron laser</label><br /><input type="checkbox" name="topics[89710]" value="89710" id="topics[89710]" class="sq-form-field" /><label for="topics[89710]">General</label><br /><input type="checkbox" name="topics[89708]" value="89708" id="topics[89708]" class="sq-form-field" /><label for="topics[89708]">High pressure</label><br /><input type="checkbox" name="topics[89701]" value="89701" id="topics[89701]" class="sq-form-field" /><label for="topics[89701]">Industrial crystallography</label><br /><input type="checkbox" name="topics[89700]" value="89700" id="topics[89700]" class="sq-form-field" /><label for="topics[89700]">Inelastic X-ray scattering</label><br /><input type="checkbox" name="topics[89698]" value="89698" id="topics[89698]" class="sq-form-field" /><label for="topics[89698]">Magnetism</label><br /><input type="checkbox" name="topics[89721]" value="89721" id="topics[89721]" class="sq-form-field" /><label for="topics[89721]">Materials</label><br /><input type="checkbox" name="topics[90557]" value="90557" id="topics[90557]" class="sq-form-field" /><label for="topics[90557]">Mathematical and Theoretical Crystallography</label><br /><input type="checkbox" name="topics[140410]" value="140410" id="topics[140410]" class="sq-form-field" /><label for="topics[140410]">Metals and metallurgy</label><br /><input type="checkbox" name="topics[89705]" value="89705" id="topics[89705]" class="sq-form-field" /><label for="topics[89705]">Microscopy</label><br /><input type="checkbox" name="topics[89732]" value="89732" id="topics[89732]" class="sq-form-field" /><label for="topics[89732]">Mineralogy</label><br /><input type="checkbox" name="topics[115574]" value="115574" id="topics[115574]" class="sq-form-field" /><label for="topics[115574]">Nanomaterials</label><br /><input type="checkbox" name="topics[89724]" value="89724" id="topics[89724]" class="sq-form-field" /><label for="topics[89724]">Neutron scattering</label><br /><input type="checkbox" name="topics[102862]" value="102862" id="topics[102862]" class="sq-form-field" /><label for="topics[102862]">NMR crystallography</label><br /><input type="checkbox" name="topics[89723]" value="89723" id="topics[89723]" class="sq-form-field" /><label for="topics[89723]">Polymorphism</label><br /><input type="checkbox" name="topics[89715]" value="89715" id="topics[89715]" class="sq-form-field" /><label for="topics[89715]">Powder diffraction</label><br /><input type="checkbox" name="topics[143392]" value="143392" id="topics[143392]" class="sq-form-field" /><label for="topics[143392]">Quantum crystallography</label><br /><input type="checkbox" name="topics[89697]" value="89697" id="topics[89697]" class="sq-form-field" /><label for="topics[89697]">Radiation damage</label><br /><input type="checkbox" name="topics[89730]" value="89730" id="topics[89730]" class="sq-form-field" /><label for="topics[89730]">Radiation physics</label><br /><input type="checkbox" name="topics[89731]" value="89731" id="topics[89731]" class="sq-form-field" /><label for="topics[89731]">Small-angle scattering</label><br /><input type="checkbox" name="topics[89733]" value="89733" id="topics[89733]" class="sq-form-field" /><label for="topics[89733]">Solid-state chemistry</label><br /><input type="checkbox" name="topics[89712]" value="89712" id="topics[89712]" class="sq-form-field" /><label for="topics[89712]">Solid-state physics</label><br /><input type="checkbox" name="topics[89716]" value="89716" id="topics[89716]" class="sq-form-field" /><label for="topics[89716]">Structural chemistry</label><br /><input type="checkbox" name="topics[89707]" value="89707" id="topics[89707]" class="sq-form-field" /><label for="topics[89707]">Surface studies</label><br /><input type="checkbox" name="topics[89728]" value="89728" id="topics[89728]" class="sq-form-field" /><label for="topics[89728]">Synchrotron radiation</label><br /><input type="checkbox" name="topics[89720]" value="89720" id="topics[89720]" class="sq-form-field" /><label for="topics[89720]">Topography</label><br /><input type="checkbox" name="topics[89703]" value="89703" id="topics[89703]" class="sq-form-field" /><label for="topics[89703]">XAFS studies</label><br /><input type="checkbox" name="topics[89727]" value="89727" id="topics[89727]" class="sq-form-field" /><label for="topics[89727]">X-ray fluorescence</label><br /><input type="checkbox" name="topics[89702]" value="89702" id="topics[89702]" class="sq-form-field" /><label for="topics[89702]">X-ray optics and imaging</label><br /><input type="checkbox" name="topics[89714]" value="89714" id="topics[89714]" class="sq-form-field" /><label for="topics[89714]">X-ray spectroscopy</label><br /></p> <p class="autofill">Specify topics: <input type="text" name="metadata_field_text_90236_calendar_event_single_value" value="" size="30" class="sq-form-field" id="metadata_field_text_90236_calendar_event_single_value" />&nbsp;</p> <h3>4. Select one or more categories</h3> <p><input type="checkbox" name="types[89736]" value="89736" id="types[89736]" class="sq-form-field" /><label for="types[89736]">IUCr Congress and General Assembly</label><br /><input type="checkbox" name="types[89737]" value="89737" id="types[89737]" class="sq-form-field" /><label for="types[89737]">IUCr sponsored meetings</label><br /><input type="checkbox" name="types[89738]" value="89738" id="types[89738]" class="sq-form-field" /><label for="types[89738]">National crystallographic association meetings</label><br /><input type="checkbox" name="types[89739]" value="89739" id="types[89739]" class="sq-form-field" /><label for="types[89739]">Regional crystallographic association meetings</label><br /><input type="checkbox" name="types[89740]" value="89740" id="types[89740]" class="sq-form-field" /><label for="types[89740]">Schools</label><br /><input type="checkbox" name="types[89743]" value="89743" id="types[89743]" class="sq-form-field" /><label for="types[89743]">Conferences</label><br /><input type="checkbox" name="types[89741]" value="89741" id="types[89741]" class="sq-form-field" /><label for="types[89741]">Exhibitions</label><br /><input type="checkbox" name="types[89742]" value="89742" id="types[89742]" class="sq-form-field" /><label for="types[89742]">Lectures</label><br /><input type="checkbox" name="types[89744]" value="89744" id="types[89744]" class="sq-form-field" /><label for="types[89744]">Seminars</label><br /><input type="checkbox" name="types[89745]" value="89745" id="types[89745]" class="sq-form-field" /><label for="types[89745]">Symposia</label><br /><input type="checkbox" name="types[90302]" value="90302" id="types[90302]" class="sq-form-field" /><label for="types[90302]">Training courses</label><br /><input type="checkbox" name="types[89746]" value="89746" id="types[89746]" class="sq-form-field" /><label for="types[89746]">Workshops</label><br /><input type="checkbox" name="types[89747]" value="89747" id="types[89747]" class="sq-form-field" /><label for="types[89747]">Other</label><br /></p> <p class="autofill">Specify categories: <input type="text" name="metadata_field_text_90235_calendar_event_single_value" value="" size="30" class="sq-form-field" id="metadata_field_text_90235_calendar_event_single_value" />&nbsp;</p> <h3>5. Event details</h3> <table> <tbody> <tr> <td id="_td0_0" valign="top">Name of event (<em>e.g.</em> "Bragg commemorative symposium")</td> <td id="_td0_1" valign="top">&nbsp; <input type="text" name="calendar_event_single_0_1444" value="" size="30" class="sq-form-field" id="calendar_event_single_0_1444" /></td> </tr> <tr> <td id="_td1_0" valign="top" style="style=">Description of event</td> <td id="_td1_1" valign="top" style="style=">&nbsp; <script type="text/javascript" src="https://www.iucr.org/__lib/js/edit.js"></script> <script type="text/javascript"> var bodycopy_initialised = true; </script> <div style="border: 1px dashed #C0C0C0;" id="calendar_event_single_0_1442_switch_option_div"> <table width="100%"> <tr> <td align="left"> <div style="width: 16px; height: 16px; background: url(https://www.iucr.org/__lib/web/images/icons/edit_mode.png);background: expression('none');filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='https://www.iucr.org/__lib/web/images/icons/edit_mode.png', sizingMethod='scale'); font-size:10px; cursor:pointer;" onclick="switchEditingMode('calendar_event_single_0_1442_contents_div','calendar_event_single_0_1442_wysiwyg_div', editor_calendar_event_single_0_1442);"> </div> </td> <td align="right"> <img src="https://www.iucr.org/__data/asset_types/bodycopy/images/icons/htmltidy_wait.png" alt="[HTMLTidy Status]" title="" height="16" width="16" onmouseover="if (bodycopy_initialised) tooltip.show(this, 'HTMLTidy has not been used to clean this content', 'HTMLTidy Status')" onmouseout="if (bodycopy_initialised) tooltip.hide()" onclick="" align="absmiddle" class="sq-icon" /> <img src="https://www.iucr.org/__data/asset_types/bodycopy/images/icons/accessibility_pass.png" alt="[HTMLTidy Status]" title="" height="16" width="16" onmouseover="if (bodycopy_initialised) tooltip.show(this, 'No warning for Accessibility check', 'HTMLTidy Accessibility')" onmouseout="if (bodycopy_initialised) tooltip.hide()" onclick="" align="absmiddle" class="sq-icon" /> </td> </tr> </table> </div> <div style="border-left: 1px dashed #C0C0C0; border-right: 1px dashed #C0C0C0; border-bottom: 1px dashed #C0C0C0;"> <div style="display:none;" id="calendar_event_single_0_1442_wysiwyg_div"> <script type="text/javascript"> // // htmlArea v3.0 - Copyright (c) 2002 interactivetools.com, inc. // This copyright notice MUST stay intact for use (see license.txt). // // A free WYSIWYG editor replacement for <textarea> fields. // For full source code and docs, visit http://www.interactivetools.com/ // // Version 3.0 developed by Mihai Bazon for InteractiveTools. // http://students.infoiasi.ro/~mishoo // // Modifications for PHP Plugin Based System // developed by Greg Sherwood for Squiz.Net. // http://www.squiz.net/ // greg@squiz.net // // Creates a new HTMLArea object. Tries to replace the textarea with the given // ID with it. function HTMLArea(textarea, config) { if (HTMLArea.checkSupportedBrowser()) { if (typeof config == "undefined") { eval("this.config = new HTMLArea.Config_" + textarea + "();"); } else { this.config = config; } this._htmlArea = null; this._textArea = textarea; this._uniqueID = textarea; this._editMode = "wysiwyg"; this._initialised = false; this._timerToolbar = null; this._toolbarObjects = Array(); this._toolbarMenus = Array(); this._tmp = Array(); this.config.fontname = { "Arial": 'arial,helvetica,sans-serif', "Courier New": 'courier new,courier,monospace', "Georgia": 'georgia,times new roman,times,serif', "Tahoma": 'tahoma,arial,helvetica,sans-serif', "Times New Roman": 'times new roman,times,serif', "Verdana": 'verdana,arial,helvetica,sans-serif', "impact": 'impact', "WingDings": 'wingdings' }; this.config.fontsize = { "1 (8 pt)": "1", "2 (10 pt)": "2", "3 (12 pt)": "3", "4 (14 pt)": "4", "5 (18 pt)": "5", "6 (24 pt)": "6", "7 (36 pt)": "7" }; this.config.formatblock = { "Heading 1": "h1", "Heading 2": "h2", "Heading 3": "h3", "Heading 4": "h4", "Heading 5": "h5", "Heading 6": "h6", "Normal": "p", "Address": "address", "Formatted": "pre" }; this.config.applystyle = { }; this.config.formatblock = { "Heading 1": "h1", "Heading 2": "h2", "Heading 3": "h3", "Heading 4": "h4", "Heading 5": "h5", "Heading 6": "h6", "Normal" : "p", "Address" : "address", "Formatted": "pre" }; this.config._showborders = true; this.config.chooselang = { "-- choose language --": "","None": "", "English": "en", "Spanish": "es", "French": "fr", "Italian": "it", "Portuguese": "pt", "German": "de", "Russian": "ru", "Arabic": "ar", "Chinese": "zh", "Hebrew": "he", "Japanese": "ja", "Korean": "ko", "Swahili": "sw", "Greek": "el", "Latin": "la", "---------------------": "","Abkhazian": "ab", "Afar": "aa", "Afrikaans": "af", "Albanian": "sq", "Amharic": "am", "Armenian": "hy", "Assamese": "as", "Aymara": "ay", "Azerbaijani": "az", "Bashkir": "ba", "Basque": "eu", "Bengali; Bangla": "bn", "Bhutani": "dz", "Bihari": "bh", "Bislama": "bi", "Breton": "br", "Bulgarian": "bg", "Burmese": "my", "Byelorussian": "be", "Cambodian": "km", "Catalan": "ca", "Corsican": "co", "Croatian": "hr", "Czech": "cs", "Danish": "da", "Dutch": "nl", "Esperanto": "eo", "Estonian": "et", "Faroese": "fo", "Fiji": "fj", "Finnish": "fi", "Frisian": "fy", "Galician": "gl", "Georgian": "ka", "Greenlandic": "kl", "Guarani": "gn", "Gujarati": "gu", "Hausa": "ha", "Hindi": "hi", "Hungarian": "hu", "Icelandic": "is", "Indonesian": "id", "Interlingua": "ia", "Interlingue": "ie", "Inuktitut": "iu", "Inupiak": "ik", "Irish": "ga", "Javanese": "jw", "Kannada": "kn", "Kashmiri": "ks", "Kazakh": "kk", "Kinyarwanda": "rw", "Kirghiz": "ky", "Kirundi": "rn", "Kurdish": "ku", "Laothian": "lo", "Latvian, Lettish": "lv", "Lingala": "ln", "Lithuanian": "lt", "Macedonian": "mk", "Malagasy": "mg", "Malay": "ms", "Malayalam": "ml", "Maltese": "mt", "Maori": "mi", "Marathi": "mr", "Moldavian": "mo", "Mongolian": "mn", "Nauru": "na", "Nepali": "ne", "Norwegian": "no", "Occitan": "oc", "Oriya": "or", "(Afan) Oromo": "om", "Pashto, Pushto": "ps", "Persian": "fa", "Polish": "pl", "Punjabi": "pa", "Quechua": "qu", "Rhaeto-Romance": "rm", "Romanian": "ro", "Samoan": "sm", "Sangho": "sg", "Sanskrit": "sa", "Scots Gaelic": "gd", "Serbian": "sr", "Serbo-Croatian": "sh", "Sesotho": "st", "Setswana": "tn", "Shona": "sn", "Sindhi": "sd", "Sinhalese": "si", "Siswati": "ss", "Slovak": "sk", "Slovenian": "sl", "Somali": "so", "Sundanese": "su", "Swedish": "sv", "Tagalog": "tl", "Tajik": "tg", "Tamil": "ta", "Tatar": "tt", "Telugu": "te", "Thai": "th", "Tibetan": "bo", "Tigrinya": "ti", "Tonga": "to", "Tsonga": "ts", "Turkish": "tr", "Turkmen": "tk", "Twi": "tw", "Uighur": "ug", "Ukrainian": "uk", "Urdu": "ur", "Uzbek": "uz", "Vietnamese": "vi", "Volapuk": "vo", "Welsh": "cy", "Wolof": "wo", "Xhosa": "xh", "Yiddish": "yi", "Yoruba": "yo", "Zhuang": "za", "Zulu": "zu" }; } }; </script> <script type="text/javascript"> // Creates the toolbar and appends it to the _htmlarea HTMLArea.prototype._createToolbar = function () { var editor = this; // to access this in nested functions var toolbar = document.createElement("div"); toolbar.style.width = "100%"; var innerToolbar = document.createElement("div"); var table = document.createElement("table"); table.border = "0px"; table.cellSpacing = "1px"; table.cellPadding = "1px"; toolbar.appendChild(table); // TBODY is required for IE, otherwise you don't see anything in the TABLE. var tb_body = document.createElement("tbody"); table.appendChild(tb_body); tb_row = document.createElement("tr"); tb_body.appendChild(tb_row); tb_cell = document.createElement("td"); tb_row.appendChild(tb_cell); tb_cell.appendChild(innerToolbar); this._toolbar = toolbar; toolbar.className = "htmlarea-toolbar"; toolbar.unselectable = "1"; var tb_objects = new Object(); this._toolbarObjects = tb_objects; // updates the state of a toolbar element function setButtonStatus(id, newval) { var oldval = this[id]; var el = this.element; var img = el.style.backgroundImage; if (img != "" && oldval != newval) { switch (id) { case "enabled": if (newval) { HTMLArea._removeClass(el, "htmlarea-buttonDisabled"); el.style.backgroundImage = "url(" + editor.imgURL("toolbar.png") + ")"; el.disabled = false; } else { HTMLArea._addClass(el, "htmlarea-buttonDisabled"); el.style.backgroundImage = "url(" + editor.imgURL("toolbar_disabled.png") + ")"; el.disabled = true; } break; case "active": if (newval) { HTMLArea._addClass(el, "htmlarea-buttonPressed"); } else { HTMLArea._removeClass(el, "htmlarea-buttonPressed"); } break; } this[id] = newval; } }; // this function will handle creation of combo boxes function createSelect(txt) { var options = null; var el = null; var sel = null; var cmd = null; switch (txt) { case "fontsize": case "fontname": case "formatblock": options = editor.config[txt]; // HACK ;) cmd = txt; break; case "applystyle": case "formatblock": options = editor.config[txt]; cmd = txt; break; case "chooselang" : options = editor.config[txt]; cmd = txt; break; } if (options) { sel = document.createElement("select"); sel.className = "htmlarea-select"; var obj = { name: txt, // field name element: sel, // the UI element (SELECT) enabled: true, // is it enabled? text: false, // enabled in text mode? cmd: cmd, // command ID state: setButtonStatus // for changing state }; tb_objects[txt] = obj; for (var i in options) { var op = document.createElement("option"); op.appendChild(document.createTextNode(i)); op.value = options[i]; sel.appendChild(op); } el = document.createElement("div"); el.className = "htmlarea-select-container"; el.appendChild(sel); HTMLArea._addEvent(sel, "change", function () { editor._comboSelected(sel, txt); }); } return el; }; // appends a new button to toolbar function createButton(container, txt) { // the element that will be created var el = null; var btn = null; switch (txt) { case "separator": el = document.createElement("div"); el2 = document.createElement("div"); el.appendChild(el2); el.className = "htmlarea-separator"; break; case "space": el = document.createElement("div"); el.className = "htmlarea-space"; break; case "linebreak": el = document.createElement("div"); el.className = "htmlarea-space"; break; case "textindicator": el = document.createElement("div"); el.appendChild(document.createTextNode("A")); el.className = "htmlarea-indicator"; el.title = HTMLArea.I18N.tooltips.textindicator; var obj = { name: txt, // the button name (i.e. 'bold') element: el, // the UI element (DIV) enabled: true, // is it enabled? active: false, // is it pressed? text: false, // enabled in text mode? cmd: "textindicator", // the command ID state: setButtonStatus // for changing state }; tb_objects[txt] = obj; break; default: btn = editor.config.btnList[txt]; break; } if (!el && btn) { el = document.createElement("div"); el.title = btn[1]; el.className = "htmlarea-button"; // let's just pretend we have a button object, and // assign all the needed information to it. var obj = { name : txt, // the button name (i.e. 'bold') element : el, // the UI element (SPAN) enabled : true, // is it enabled? active : false, // is it pressed? text : btn[2], // enabled in text mode? cmd : btn[0], // the command ID state : setButtonStatus, // for changing state context : btn[4] || null // will be disabled if outside this element }; tb_objects[txt] = obj; // handlers to emulate nice flat toolbar buttons HTMLArea._addEvent(el, "mouseover", function () { if (obj.enabled) { HTMLArea._addClass(el, "htmlarea-buttonHover"); } }); HTMLArea._addEvent(el, "mouseout", function () { if (obj.enabled) with (HTMLArea) { _removeClass(el, "htmlarea-buttonHover"); _removeClass(el, "htmlarea-buttonActive"); (obj.active) && _addClass(el, "htmlarea-buttonPressed"); } }); HTMLArea._addEvent(el, "mousedown", function (ev) { if (obj.enabled) with (HTMLArea) { _addClass(el, "htmlarea-buttonActive"); _removeClass(el, "htmlarea-buttonPressed"); _stopEvent(is_ie ? window.event : ev); } }); // when clicked, do the following: HTMLArea._addEvent(el, "click", function (ev) { if (obj.enabled) with (HTMLArea) { _removeClass(el, "htmlarea-buttonActive"); _removeClass(el, "htmlarea-buttonHover"); editor._buttonClicked(txt); _stopEvent(is_ie ? window.event : ev); } }); var buttonID = editor._uniqueID + "_" + txt; buttonID = buttonID.toLowerCase(); el.id = buttonID + "_span"; var btnTop = Math.floor(btn[3] / 5); var btnLeft = ((btn[3] - (btnTop * 5)) * 18); el.style.background = "url(" + editor.imgURL("toolbar.png") + ") scroll -" + btnLeft + "px -" + (btnTop * 20) + "px"; el.innerHTML = '<img src="' + editor.imgURL("blank.gif") + '" width="17" height="19" />'; } else if (!el) { el = createSelect(txt); } if (el) { container.appendChild(el); } else if (txt != 'addkeyword') { // Do not throw error if the missing plugin is "add keyword" because // its possible for plugin to get miss out from js code if a div content having keywords // is linked (new link) elsewhere next to the div content without any keywords // See bug #4475 alert(js_translate('unknown_toolbar_item', txt)); } return el; }; for (var i in this.config.toolbar) { var group = this.config.toolbar[i]; for (var j in group) { var menu = group[j]; if (menu.length < 1) { continue; } else if (menu.length == 1) { createButton(innerToolbar, menu[0]); } else { var div = document.createElement("div"); editor._toolbar.appendChild(div); div.style.display = "none"; div.style.position = "absolute"; div.className = "htmlarea-menu"; div.id = menu[0] + "_menu"; createButton(innerToolbar, menu[0]); this.config.btnList[menu[0]][0] = "htmlarea-showmenu-" + menu[0]; for (var x in menu) { if (x == 0) { continue; } var table = document.createElement("table"); var tb_body = document.createElement("tbody"); var tb_row = document.createElement("tr"); var tb_cell = document.createElement("td"); table.appendChild(tb_body); tb_body.appendChild(tb_row); tb_row.appendChild(tb_cell); table.className = "htmlarea-menuRow"; createButton(tb_cell, menu[x]) tb_cell = document.createElement("td"); tb_cell.className = "htmlarea-menuText"; tb_row.appendChild(tb_cell); var title = document.createTextNode(this.config.btnList[menu[x]][1]); tb_cell.appendChild(title); div.appendChild(table); } this._toolbarMenus[div.id] = div; } } } }; // updates enabled/disable/active state of the toolbar elements HTMLArea.prototype.updateToolbar = function(allEnabled, noStatus) { var doc = this._doc; var text = (this._editMode == "textmode"); var ancestors = null; var htmlareaFound = false; if (!text) { ancestors = this.getAllAncestors(); if (this.config.statusBar && !noStatus) { this._statusBarTree.innerHTML = ''; // clear for (var i = ancestors.length; --i >= 0;) { var el = ancestors[i]; if (!el) { // hell knows why we get here; this // could be a classic example of why // it's good to check for conditions // that are impossible to happen ;-) continue; } // work out the display name for this tag var txt = el.tagName.toLowerCase(); if (el.id) { txt += "#" + el.id; } if (el.className) { txt += "." + el.className; } // if we are playing with an editable DIV, we need to tread carefully // because there is no body tag expect the one for the whole page // so we fudge the results a little to skip tags outside of the editor if (HTMLArea.is_ie && this.config.bodyType.toLowerCase() != 'iframe') { if (el.id == "htmlarea") { htmlareaFound = true; i--; var el = ancestors[i]; txt = 'body'; } if (!htmlareaFound) { continue; } } var a = document.createElement("a"); a.href = "#"; a.el = el; a.editor = this; a.onclick = function() { this.blur(); this.editor.selectNodeContents(this.el); this.editor.updateToolbar(true); return false; }; a.oncontextmenu = function() { // TODO: add context menu here this.blur(); var info = "Inline style:\n\n"; info += this.el.style.cssText.split(/;\s*/).join(";\n"); alert(info); return false; }; a.title = el.style.cssText; // NOTE: Using appendChild here causes IE to clear its undo/redo queue a.appendChild(document.createTextNode(txt)); this._statusBarTree.appendChild(a); if (i != 0) { this._statusBarTree.appendChild(document.createTextNode(String.fromCharCode(0xbb))); } } } } for (var i in this._toolbarObjects) { var btn = this._toolbarObjects[i]; var cmd = btn.cmd; var inContext = true; if (btn.context && !text) { inContext = false; var context = btn.context; var attrs = []; if (/(.*)\[(.*?)\]/.test(context)) { context = RegExp.$1; attrs = RegExp.$2.split(","); } context = context.toLowerCase(); var match = (context == "*"); htmlareaFound = false; for (var k = ancestors.length; --k >= 0;) { var el = ancestors[k]; if (!el) { // the impossible really happens. continue; } // if we are playing with an editable DIV, we need to tread carefully // so we can skip tags outside of the editor if (HTMLArea.is_ie && this.config.bodyType.toLowerCase() != 'iframe') { if (el.id == "htmlarea") { htmlareaFound = true; k--; el = ancestors[k]; } if (!htmlareaFound) { continue; } } if (match || (el.tagName.toLowerCase() == context)) { inContext = true; for (var ka in attrs) { if (!eval("ancestors[k]." + attrs[ka])) { inContext = false; break; } } if (inContext) { break; } } } } if (typeof cmd == "function") { continue; } if (allEnabled == null) { var btnEnabled = (!text || btn.text) && inContext; } else { var btnEnabled = allEnabled; } btn.state("enabled", btnEnabled); cmd = cmd.toLowerCase(); switch (cmd) { case "fontname": case "fontsize": case "formatblock": if (!text) { if (!doc) break; var value = ''; try { value = ("" + doc.queryCommandValue(cmd)).toLowerCase(); } catch (e) {} if (!value) { break; } var options = this.config[i]; // HACK!! var k = 0; // btn.element.selectedIndex = 0; for (var j in options) { // FIXME: the following line is scary. if ((j.toLowerCase() == value) || (options[j].substr(0, value.length).toLowerCase() == value)) { btn.element.selectedIndex = k; break; } ++k; } } break; case "applystyle": if (!text) { var options = this.config["applystyle"]; var current_span = this.getClosest("span"); var found = false; if (current_span) { var value = current_span.className; var k = 0; for (var j in options) { if (options[j].toLowerCase() == value) { btn.element.selectedIndex = k; found = true; break; } ++k; } } if (!found) { btn.element.selectedIndex = 0; } } break; case "formatblock": if (!text) { if (!doc) break; var value = ''; try { var value = ("" + doc.queryCommandValue(cmd)).toLowerCase(); } catch (e) {} if (!value) { break; } btn.element.selectedIndex = 0; var options = this.config["formatblock"]; // HACK!! var k = 0; for (var j in options) { // FIXME: the following line is scary. if ((j.toLowerCase() == value) || (options[j].substr(0, value.length).toLowerCase() == value)) { btn.element.selectedIndex = k; break; } ++k; } } break; case "matrixcreatelink": if (allEnabled == null && this._tmp['disable_toolbar'] == true) { this.updateToolbar(false); return; } break; case "matrixcreateanchor": if (allEnabled == null && this._tmp['disable_toolbar'] == true) { this.updateToolbar(false); return; } break; case "matrixabbr": if (allEnabled == null && this._tmp['disable_toolbar'] == true) { this.updateToolbar(false); return; } break; case "matrixacronym": if (allEnabled == null && this._tmp['disable_toolbar'] == true) { this.updateToolbar(false); return; } break; case "chooselang" : if (!text) { var options = this.config["chooselang"]; var current_span = this.getClosest("span"); var found = false; if (current_span) { var value = current_span.lang; var k = 0; for (var j in options) { if (options[j].toLowerCase() == value) { btn.element.selectedIndex = k; found = true; break; } ++k; } } if (!found) {btn.element.selectedIndex = 0; } } break; case "misccite": if (allEnabled == null && this._tmp['disable_toolbar'] == true) { this.updateToolbar(false); return; } break; case "miscdfn": if (allEnabled == null && this._tmp['disable_toolbar'] == true) { this.updateToolbar(false); return; } break; case "textindicator": if (!text) { try { with (btn.element.style) { backgroundColor = HTMLArea._makeColor(doc.queryCommandValue("backcolor")); color = HTMLArea._makeColor(doc.queryCommandValue("forecolor")); fontFamily = doc.queryCommandValue("fontname"); fontWeight = doc.queryCommandState("bold") ? "bold" : "normal"; fontStyle = doc.queryCommandState("italic") ? "italic" : "normal"; } } catch (e) { with (btn.element.style) { backgroundColor = "#FFFFFF"; color = "#000000"; } } } break; case "htmlmode": btn.state("active", text); break; default: try { btn.state("active", (!text && doc.queryCommandState(cmd))); } catch (e) {} break; } } }; // gets called before the form is submitted HTMLArea.prototype._formSubmit = function() { var editor = this; // needed in nested functions var html = this.getHTML(); // HTML that will be set // can be modified by plugins // retrieve the HTML html = this.make_relative_hrefs(html); this._textArea.value = html; }; </script> <script type="text/javascript" language="Javascript"> // Replaces the 'fromTag' tag to 'toTag' in the given selection HTMLArea.prototype._convertTags = function(fromTag, toTag) { if (HTMLArea.is_ie) { // We dont need to convert tags for IE, as IE will have the required tags already return; } if (fromTag == null || toTag == null) { return; } fromTag = fromTag.toLowerCase(); toTag = toTag.toLowerCase(); // Get the required tags within the selection var sel = this._getSelection(); var parent = this.parentBlock(this.getParentElement()); var elements = parent.getElementsByTagName(fromTag); // Restrict the element list to within the selection var elementsArray = []; for(var i = 0; i<elements.length; i++) { if (sel.containsNode(elements[i], true)) { elementsArray.push(elements[i]); } } // Get the selection anchor and focus nodes var anchorNode = sel.anchorNode; var anchorOffset = sel.anchorOffset; var focusNode = sel.focusNode; var focusOffset = sel.focusOffset; // Carry out the replacement for(var j = 0; j< elementsArray.length; j++) { var replacementEl = document.createElement(toTag); replacementEl.innerHTML = elementsArray[j].innerHTML; elementsArray[j].parentNode.replaceChild(replacementEl, elementsArray[j]); // Update the anchor and focus nodes var oldAnchorTextNode = elementsArray[j].firstChild; var newAnchorTextNode = replacementEl.firstChild; while(oldAnchorTextNode.nodeName != '#text' && oldAnchorTextNode.hasChildNodes()) { newAnchorTextNode = newAnchorTextNode.firstChild; oldAnchorTextNode = oldAnchorTextNode.firstChild; } var oldFocusTextNode = elementsArray[j].lastChild; var newFocusTextNode = replacementEl.lastChild; while(oldFocusTextNode.nodeName != '#text' && oldFocusTextNode.hasChildNodes()) { newFocusTextNode = newFocusTextNode.lastChild; oldFocusTextNode = oldFocusTextNode.lastChild; } if (oldAnchorTextNode === anchorNode) { anchorNode = newAnchorTextNode; } if (oldFocusTextNode === focusNode) { focusNode = newFocusTextNode; } } // Update the selection range if (anchorNode != null && focusNode != null) { var range = this._createRange(); range.setStart(anchorNode, anchorOffset); range.setEnd(focusNode, focusOffset); sel.removeAllRanges(); sel.addRange(range); } } </script> <script type="text/javascript" language="Javascript"> // Global variable to store the text nodes in the document var global_text_nodes = Array(); // Selects the given text in the supplied textnode HTMLArea.prototype._selectTextContent = function(node, keyword, index, mcase, moption, direction, find_only) { textNode = this._getTextNode(node); if (textNode === null || textNode.nodeType != 3) return -1; var text = textNode.nodeValue; if (text === null || keyword === null || !text.length || !keyword.length) return -1; // Case sensitive match text = mcase ? text : text.toLowerCase(); keyword = mcase ? keyword : keyword.toLowerCase(); // Check if we are at end of or the start of the text content if (direction === undefined) direction = true; if ((direction && (index + keyword.length) > text) || (!direction && (index - keyword.length) < 0)) return -1; if (index === undefined || index < 0) index = 0; keyword = this._escapeRegexChars(keyword); var word_pos; var correct_match = false; var left_char_empty; var right_char_empty; // Search the keyword do { word_pos = direction ? text.indexOf(keyword, index) : text.lastIndexOf(keyword, index - keyword.length); if (word_pos > -1) { // So we found the keyword. Now make sure it adheres the partial/whole word condition thing left_char_empty = text.charAt(word_pos - 1).match(/[a-z0-9]/i) === null ? true : false; right_char_empty = text.charAt(word_pos + keyword.length).match(/[a-z0-9]/i) === null ? true: false; correct_match = (moption == 'whole' && left_char_empty && right_char_empty) || (moption == 'start' && left_char_empty) || (moption == 'end' && right_char_empty) || (moption == 'none'); } // Move the index index = direction ? index + keyword.length : index - keyword.length; } while (!correct_match && index < text.length && index >= 0); // If text was not found then we needn't select anything if (!correct_match) return -1; // If we just need the word position then we needn't proceed further if (find_only !== undefined && find_only) return word_pos; var range; if (HTMLArea.is_ie) { range = this._createTextRange(); // Can't move range to the individual text nodes in IE for some reasons // So to workarond this, create and place an empty span element right before the text node // and then move the range to this span element var span_el = document.createElement("span"); textNode.parentNode.insertBefore(span_el, textNode); range.moveToElementText(span_el); range.collapse(true); range.moveStart("character", word_pos); range.moveEnd("character", keyword.length); range.select(); range.scrollIntoView(); // Once done selecting, get rid of the span element created above textNode.parentNode.removeChild(span_el); } else { var sel = this._getSelection(); range = this._doc.createRange(); range.setStart(textNode, word_pos); range.setEnd(textNode, word_pos + keyword.length); sel.removeAllRanges(); sel.addRange(range); textNode.parentNode.scrollIntoView(); } return direction ? word_pos + keyword.length : word_pos; }; // Get the number of occurance of given regular expression HTMLArea.prototype._countWord = function(text, regex){ var count = 0; text.replace( regex, function(){ count++; } ); return count; } // DOM tree walker to get all the text nodes HTMLArea.prototype._getTextNodes = function(refresh) { refresh = refresh === undefined || !refresh ? false : true; // If the we have parsed the DOM tree before for the text nodes if (!refresh && global_text_nodes.length > 0) { return global_text_nodes; } var root = !HTMLArea.is_ie ? this._iframe.contentWindow.document.body : this._docContent; var text_nodes = Array(); var node = root.childNodes[0]; var count = 0; while(node != null) { if (node.nodeType == 3) { text_nodes[count++] = node; } if (node.hasChildNodes()) { node = node.firstChild; } else { while(node.nextSibling == null && node != root) { node = node.parentNode; } node = node.nextSibling; } } // Store the value in the global variable for reuse global_text_nodes = text_nodes; return text_nodes; } // Get the text node from the WYSIWYG body HTMLArea.prototype._getTextNode = function(index){ if (index < 0) return null; var node = null; var count = 0; var child_nodes = this._getTextNodes(); while(node = child_nodes[count]) { if (count == index) break; count++; } return node; } // Returns the index of the last text node from the WYSIWYG body HTMLArea.prototype._getLastTextNodeIndex = function(){ var count = 0; var text_nodes = this._getTextNodes(); return text_nodes.length - 1; } // Empty the global variable storing all the text nodes in the document HTMLArea.prototype._refreshStoredTextNodes = function(){ global_text_nodes = Array(); } // Escapes all the regular expression characters in the given text HTMLArea.prototype._escapeRegexChars = function(text){ var regex_chars = Array('/', '{', '}', '[', ']', '(', ')', '-', '+', '*', '^', '$', '?', '.'); arguments.callee.regex = new RegExp('(\\'+regex_chars.join('|\\') + ')', 'g'); return text.replace(arguments.callee.regex, '\\$1'); } </script> <script type="text/javascript" language="Javascript"> HTMLArea.prototype._insertHorizontalRule = function() { this.surroundHTML('', '<hr>'); } </script> <script type="text/javascript" language="Javascript"> HTMLArea.prototype._addAlignAttribute = function(node) { var current = node.getAttribute("align"); if (current != "") { node.style.textAlign = current; node.removeAttribute("align"); } } HTMLArea.prototype._operateTags = function(tagname) { nodes = document.getElementsByTagName(tagname); for (var i=0; i<nodes.length; i++) { this._addAlignAttribute(nodes[i]); } } </script> <script type="text/javascript"> // Called when the user clicks on "Insert Blockquote" button HTMLArea.prototype._changeIndent = function(direction) { if (HTMLArea.is_ie) { // IE - we need to override some stuff var blockElts = "|applet|div|embed|fieldset|form|h1|h2|h3|h4|h5|h6|iframe|ilayer|img|object|p|pre|quote|table|textarea|ul|ol|"; var sel = this._getSelection(); var range = this._createRange(sel); range.expand('character'); range.select(); if (direction == 'right') { // First get the browser to do its thing this._execCommand('indent', false, ''); // Second, remove the blockquote element if necessary var sel = this._getSelection(); var range = this._createRange(sel); range.expand('character'); var parent = range.parentElement(); if (parent.tagName.toLowerCase() == 'p') { parent = parent.parentNode; } if (parent.tagName == 'BLOCKQUOTE') { var subElt = parent.firstChild; while (subElt != null) { newElt = subElt.nextSibling; if (subElt.tagName) { if (blockElts.indexOf('|'+subElt.tagName.toLowerCase()+'|') != -1) { this._setLeftMargin(direction, subElt); } parent.removeChild(subElt); parent.parentNode.insertBefore(subElt, parent); } subElt = newElt; } parent.parentNode.removeChild(parent); } } else { // First, try to trim off left margin ourselves var tRange = this._doc.selection.createRange() if (tRange.parentElement().tagName.toLowerCase() == 'p') { tRange.moveToElementText(tRange.parentElement()); } tRange.moveStart('character', -1); tRange.moveEnd('character', 1); var parent = this.getParentElement(); if (parent.tagName.toLowerCase() == 'p') { parent = parent.parentNode; } var subElt = parent.firstChild; var success = false; var foundFirst = false; while (subElt != null) { var nextElt = subElt.nextSibling; if (subElt.tagName) { var nodeRange = tRange.duplicate(); nodeRange.moveToElementText(subElt); nodeRange.expand('character'); if (tRange.inRange(nodeRange)) { if (blockElts.indexOf('|'+subElt.tagName.toLowerCase()+'|') != -1) { success = this._setLeftMargin(direction, subElt) || success; } } } subElt = nextElt; } // If we didn't catch anything, send it to the browser for handling if (!success) { this._doc.execCommand('outdent', false, ''); } } } else { // NOT IE - browser default behaviour is fine this._doc.execCommand((direction == 'left') ? 'outdent' : 'indent', false, ''); } } // Set the left margin value of the element's style HTMLArea.prototype._setLeftMargin = function(direction, el) { if (el.style.marginLeft == "" || el.style.marginLeft == "0pt"|| el.style.marginLeft == "0px") { if (direction == "right") { el.style.marginLeft = "40px"; } else { return false; // could not outdent } } else { var new_px; var result = el.style.marginLeft.match(/(\d)+px/g); var current_indent = parseInt(result[0]); if (direction == "right") { new_px = current_indent + 40; } else if (direction == "left") { if (current_indent > 40) { new_px = current_indent - 40; } else if (current_indent == 40) { new_px = 0; } else { return false; // could not outdent } } el.style.marginLeft = new_px.toString(); } return true; }; </script> <script type="text/javascript"> //<![CDATA[ //global for holding table data. Used to workaround 4096 byte limit //IE imposes on dialogArguments. var table_structure; // helper function that clears the content in a table row HTMLArea.prototype.clearRow = function(tr) { var mozbr = HTMLArea.is_gecko ? "<br />" : ""; var tds = tr.getElementsByTagName("td"); for (var i = tds.length; --i >= 0;) { var td = tds[i]; td.rowSpan = 1; td.innerHTML = mozbr; } }; HTMLArea.prototype.selectNextNode = function(el) { var node = el.nextSibling; while (node && node.nodeType != 1) { node = node.nextSibling; } if (!node) { node = el.previousSibling; while (node && node.nodeType != 1) { node = node.previousSibling; } } if (!node) { node = el.parentNode; } this.selectNodeContents(node); }; // Called when the user clicks the Insert Table button HTMLArea.prototype._insertTable = function() { var editor = this; // for nested functions // set focus in case we havnt selected anything if (HTMLArea.is_ie) { this._docContent.focus(); } else if (HTMLArea.is_gecko) { this.focusEditor(); } var sel = this._getSelection(); var range = this._createRange(sel); this._popupDialog ("insertTable", "table_editing/insert_table.html", 400, 500, true, function(param) { if (!param) { // user must have pressed Cancel return false; } var doc = editor._doc; // create the table element var table = doc.createElement("table"); var row_header = param["f_headerRow"]; var col_header = param["f_headerCol"]; // assign the given arguments for (var field in param) { var value = param[field]; //alert("value="+value+"\nfield="+field); if (!value) { continue; } switch (field) { case "f_class": if (value != "") { table.className = value; } break; case "f_width": table.style.width = value + param["f_widthUnit"]; break; case "f_border": table.border = parseInt(value); break; case "f_spacing": table.cellSpacing = parseInt(value); break; case "f_padding": table.cellPadding = parseInt(value); break; case "f_summary": if (value != "") { table.setAttribute("summary", value); } break; } } if (row_header && param["f_rows"] != 0) { var thead = doc.createElement("thead"); table.appendChild(thead); } var tbody = doc.createElement("tbody"); table.appendChild(tbody); for (var i = 0; i < param["f_rows"]; ++i) { var tr = doc.createElement("tr"); if (row_header && i == 0) { thead.appendChild(tr); } else { tbody.appendChild(tr); } for (var j = 0; j < param["f_cols"]; ++j) { var td = null; // create a table header if ((col_header && j == 0) || (row_header && i == 0)) { td = doc.createElement("th"); } else { td = doc.createElement("td"); } tr.appendChild(td); if (HTMLArea.is_gecko) { // Mozilla likes to see something // inside the cell. td.appendChild(doc.createElement("br")); } else if (HTMLArea.is_ie) { // to overcome that IE will not close with </th> tag for empty content td.appendChild(doc.createTextNode('')); } } } if (HTMLArea.is_ie) { range.pasteHTML(HTMLArea.getHTML(table, true)); } else { // insert the table editor.insertNodeAtSelection(table); } return true; }, null); }; // this function requires the file PopupDiv/PopupWin to be loaded from browser HTMLArea.prototype._editTableProperties = function() { var editor = this; // for nested functions // retrieve existing values var table = this.getClosest("table"); if (HTMLArea.is_ie) { //workaround against stupid IE behaviour. We will use native MS functions var tablekeeper = table.outerHTML; } else { var div = document.createElement("DIV"); div.appendChild(table.cloneNode(true)); var tablekeeper = div.innerHTML; } table_structure = tablekeeper; strPage = "table_editing/edit_table.php"; var width = 835; var height = 730; this._popupDialog("editTableProperties", strPage, width, height, true, function(params) { if (!params) { // user must have pressed Cancel return false; } var div = document.createElement("DIV"); div.innerHTML = params; var table = div.getElementsByTagName("TABLE")[0]; var old_table = editor.getClosest("TABLE"); if (HTMLArea.is_ie) { old_table.outerHTML = table.outerHTML; } else { old_table.parentNode.replaceChild(table, old_table); } // various workarounds to refresh the table display (Gecko, // what's going on?! do not disappoint me!) editor.forceRedraw(); editor.focusEditor(); editor.updateToolbar(); var save_collapse = table.style.borderCollapse; table.style.borderCollapse = "collapse"; table.style.borderCollapse = "separate"; table.style.borderCollapse = save_collapse; }, window); //above: window is passed, so that tableStructure can be accessed by the called dialog. avoids dialogArguments limit }; //Functions for showing the table borders HTMLArea.prototype.storedBorders = Array(); this.clonedBorder = function() { this.cloneSaveBorder = function(border) { for (i in border) { this[i] = border[i]; } } } HTMLArea._restoreBorder = function(elt, stored) { if (stored.borderLeft) { elt.style.borderLeft = stored.borderLeft; } if (stored.borderRight) { elt.style.borderRight = stored.borderRight; } if (stored.borderTop) { elt.style.borderTop = stored.borderTop; } if (stored.borderBottom) { elt.style.borderBottom = stored.borderBottom; } } //]]> </script> <script type="text/javascript" src="https://www.iucr.org/__lib/js/general.js"></script> <script type="text/javascript" src="https://www.iucr.org/__fudge/var_serialise/var_serialise.js"></script> <script type="text/javascript" language="Javascript"> var wysiwyg_editing = true; // just so that onclick link's don't execute in wysiwyg HTMLArea.prototype._matrixUnLink = function() { var editor = this; // for nested functions var current_a = this.getClosest("a"); if (!current_a) { if (HTMLArea.is_ie) { //IMG tag support for IE as they land in controlRange collection. var sel = this._getSelection(); var range = this._createRange(sel); if (sel.type == "Control"){ for (i = 0; i < range.length; i++){ if (range.item(i).tagName == "IMG"){ if (range.item(i).parentNode.tagName == "A"){//check parent is anchor current_a = range.item(i).parentNode; break; } } } } } if (!current_a) return false; //still not found } var inside_html = current_a.innerHTML; var selection = editor.getSelectedHTML(); //IMG tag support //Firefox: selection same as inside_html but attributes re-arranged. //IE: can't get selection because lands in controlRange collection (see above). //selection only needed to process partial selection so just equate to inside_html (see below). var reg = new RegExp("^\s*<img ?[^>]+src=[^>]+>\s*$", "i"); if (!selection || selection.match(reg)) selection = inside_html; // Remove surrounding anchor tag from selected HTML for comparison if (HTMLArea.is_ie) { // Remove anchor start and end var e = '^<a[^>]*>'; var re = new RegExp(e, "i"); selection = selection.replace(re, ""); e = '</a>$'; re = new RegExp(e, "i"); selection = selection.replace(re, ""); // Remove newlines from anchor HTML so we can perform a meaningful comparison e = '\r\n'; re = new RegExp(e, "i"); selection = selection.replace(re, ""); } if (selection != '' && selection != inside_html) { // Partial selection within the link tag // will not work if selection partially includes other tags // for example: // <a href="example.com">partial <b>link</b> here</a> // and user selects "partial <b>li" as the selection var e = '(\<a [^\>]+>)(.*)' + '(' + selection + ')(.*)(</a>)'; var re = new RegExp(e, "i"); // turns into "<a>before</a> selection <a>after</a>" var remove_tag = HTMLArea.getHTML(current_a, true).replace(re, "$1$2$5$3$1$4$5"); // Remove empty link tags var e = '\<a [^\>]+>\\s*</a>'; var re = new RegExp(e, "gi"); inside_html = remove_tag.replace(re, ""); } var text = this._doc.createDocumentFragment(); var div = this._doc.createElement("div"); div.innerHTML = inside_html; while (div.firstChild) { text.appendChild(div.firstChild); } current_a.parentNode.replaceChild(text, current_a); } // Called when the user clicks on "InsertImage" button HTMLArea.prototype._matrixInsertLink = function() { var editor = this; // for nested functions // all available new window options var NEW_WINDOW_OPTIONS = new Array('toolbar','menubar','location','status','scrollbars','resizable','width','height'); // OK, let's create the current args array that we'll pass to the dialog var currArgs = new Object(); currArgs["assetid"] = "0"; currArgs["url"] = "http://"; currArgs["class_name"] = ""; currArgs["id_name"] = ""; currArgs["anchor"] = ""; currArgs["status_text"] = ""; currArgs["link_title"] = ""; currArgs["target"] = ""; currArgs["new_window"] = 0; currArgs["show_summary"] = 0; currArgs["new_window_options"] = new Object(); for(var i=0; i < NEW_WINDOW_OPTIONS.length; i++) { currArgs["new_window_options"][NEW_WINDOW_OPTIONS[i]] = ''; } var sel = this._getSelection(); var range = this._createRange(sel); var text_range = false; // OK, so they have a control object selected, let's try and make it a text selection var inside_html = ''; if (sel.type && sel.type.toLowerCase() == "control") { var control_range = this._createRange(sel); var text_range = this._createTextRange(sel); if (text_range != null) { text_range = true; if (Object.prototype.toString.call(control_range) == '[object ControlRangeCollection]') { inside_html = control_range.item(0).outerHTML; } else { editor.selectNodeContents(control_range(0)); sel = this._getSelection(); range = this._createRange(sel); inside_html = editor.getSelectedHTML(); } } else { alert(js_translate('object_requires_selection')); sel.empty(); return; } }// end if a control var current_a = this.getClosest("a"); if (current_a) { inside_html = current_a.innerHTML; this.selectNodeContents(current_a); } else if (inside_html == '') { inside_html = editor.getSelectedHTML(); } sel = this._getSelection(); range = this._createRange(sel); // is this aready a link? if (current_a) { var e = '^(\<a [^\>]+>)(.*)</a>$'; var re = new RegExp(e, "i"); var tag_html = HTMLArea.getHTML(current_a, true).replace(re, "$1"); var re = new RegExp("\n", "gi"); var tag_html = tag_html.replace(re, ""); currArgs["url"] = current_a.href; re = new RegExp('if \\(!window\\.wysiwyg_editing\\)[\\s]+\\{[\\s]+window\\.open\\([\'"]([^\'"]+)[\'"], [\'"][0-9]+[\'"], [\'"]([^\'"]+)[\'"]\\);', "gi"); results = re.exec(tag_html); if (results != null) { currArgs["url"] = results[1]; currArgs["new_window"] = 2; var options_str = results[2]; for(var i=0; i < NEW_WINDOW_OPTIONS.length; i++) { e = NEW_WINDOW_OPTIONS[i] + "=([^,]+)"; re = new RegExp(e, "gi"); var res = re.exec(options_str); currArgs["new_window_options"][NEW_WINDOW_OPTIONS[i]] = (res != null) ? res[1] : ""; } }// end if // let's try and get the window.status text if any re = new RegExp('onmouseover="([^"]+)"', "gi"); results = re.exec(tag_html); if (results != null) { var onmouseover = results[1]; re = new RegExp('window.status=\'(.+)\'; return true;', "gi"); results = re.exec(onmouseover); if (results != null) { currArgs["status_text"] = rev_htmlspecialchars(results[1]).replace(/\\\'/gi, "\'"); } }// end if //Get the link title, if there is one re = new RegExp('title="([^"]+)"', "gi"); results = re.exec(tag_html); if (results != null) { currArgs["link_title"] = rev_htmlspecialchars(results[1]); } // let's try and get the target if any re = new RegExp('target="([^"]+)"', "gi"); results = re.exec(tag_html); if (results != null) { currArgs["target"] = rev_htmlspecialchars(results[1]).replace(/\\\'/gi, "\'"); } if (currArgs["target"] == "_blank") { currArgs["new_window"] = 1; } // let's try and get the class if any re = new RegExp('class="([^"]+)"', "gi"); results = re.exec(tag_html); if (results != null) { currArgs["class_name"] = rev_htmlspecialchars(results[1]).replace(/\\\'/gi, "\'"); } // let's try and get the class if any re = new RegExp('id="([^"]+)"', "gi"); results = re.exec(tag_html); if (results != null) { currArgs["id_name"] = rev_htmlspecialchars(results[1]).replace(/\\\'/gi, "\'"); } // it seems that the make_relative_hrefs() fn will take out the hash and think that a lone // anchor is actually the url link. Work out here whether it might need to be added on... var needsHash = false; if (currArgs["url"].indexOf('#') != -1) { needsHash = true; } // because the editor automatically prepend the http:// business to // all relative urls remove it currArgs["url"] = unescape(editor.make_relative_hrefs(currArgs["url"])); e = '.*(\\./\\?a=[0-9]+)((:[^$]*)\\$)?'; re = new RegExp(e, "gi"); currArgs["url"] = currArgs["url"].replace(re, "$1$3"); if (currArgs["url"].substr(-1) == '/') currArgs["url"] = currArgs["url"].substr(0, currArgs["url"].length - 1) // if it's hashed and it's disappeared, add it back on here if (needsHash && (currArgs["url"].indexOf('#') == -1)) { currArgs["url"] = '#' + currArgs["url"]; } // get the assetid for the link if there is one // only matches './?a=(normal or shadow id)' e = '\\./\\?a=([0-9]+)((:[^$]*)\\$)?'; re = new RegExp(e, "gi"); results = re.exec(currArgs["url"]); if (results != null) { currArgs["assetid"] = currArgs["url"].replace(re, "$1$3"); } // if the link is made from asset attribute url // make sure to remove the url of it e = '(%globals_asset_attribute_(redirect|link)_url:([0-9]+[^$]+)%)'; re = new RegExp(e, "gi"); results = re.exec(currArgs["url"]); if (results != null) { currArgs["url"] = results[1]; currArgs["assetid"] = results[3]; } // else not a link so check for paragraphs } else { // convert all para tags to lowercase var para_html = inside_html.replace(/(<\/?)P/gi, "$1p"); // OK so we have some paragraph tags caught up in the mix, let's see what we can do with them // because we don't want our href's going around paragraph tags if (para_html.indexOf("<p") > -1) { // if the position of the first tag is the same as the last then we have only one paragraph // we don't want more than one paragraph because these can start or end from half-way through // a para, which would break the formatting when we go to re-insert the text with the href if (para_html.indexOf("<p") != para_html.lastIndexOf("<p")) { alert(js_translate('select_one_paragraph_at_a_time')); return; } }// end if paragraphs exist // check for multiple list items <li> var para_html = inside_html.replace(/(<\/?)LI/gi, "$1li"); if (para_html.indexOf("<li") > -1) { if (para_html.indexOf("<li") != para_html.lastIndexOf("<li")) { alert(js_translate('select_one_list_at_a_time')); return; } } }// end if existing link var in_popup = '0'; if (this._inPopup == true) { in_popup = '1'; } editor_calendar_event_single_0_1442._object = this; var strPage = "matrix_insert_link/insert_link_frames.php?assetid=" + encodeURIComponent(currArgs["assetid"]) + "&url=" + encodeURIComponent(currArgs["url"]) + "&status_text=" + encodeURIComponent(currArgs["status_text"]) + "&link_title=" + encodeURIComponent(currArgs["link_title"])+ "&target=" + encodeURIComponent(currArgs["target"]) + "&new_window=" + encodeURIComponent(currArgs["new_window"]) + "&new_window_options=" + encodeURIComponent(var_serialise(currArgs["new_window_options"])) + "&editor_name=" + encodeURIComponent("calendar_event_single_0_1442") + "&in_popup=" + encodeURIComponent(in_popup) + "&class_name=" + encodeURIComponent(currArgs["class_name"]) + "&id_name=" + encodeURIComponent(currArgs["id_name"]); var popup_height = 465; // A bit more breathing room for Safari if (HTMLArea.is_safari) popup_height += 5; // Should we insert the span wrapping around the asset summary? // Avoid inserting it repeatedly var insert_asset_summary_span = true; if(current_a) { var parent = current_a.parentNode; if(parent) { if(parent.nodeName == 'SPAN' && parent.className == 'include_asset_summary') { if(editor.getSelectedHTML().match(/<span class="?include_asset_summary"?>/gi) == null) { insert_asset_summary_span = false; } } } } this._popupDialog("matrixInsertLink", strPage, 750, popup_height, true, function(param) { if (param && param["url"] != "") { var html = ''; // if we have an advanced new window, generate the new javascript url string if (param["new_window"] == "1") { param["target"] = "_blank"; } if (param["new_window"] == "2") { var now = new Date(); var option_string = ""; for(var i=0; i < NEW_WINDOW_OPTIONS.length; i++) { if (option_string != "") option_string += ","; option_string += NEW_WINDOW_OPTIONS[i] + "=" + param["new_window_options"][NEW_WINDOW_OPTIONS[i]]; } param["onClick"] = "javascript: if (!window.wysiwyg_editing) { window.open('" + param["url"] + "', '" + now.getTime() + "', '" + option_string + "'); } return false;"; param["target"] = ""; } var htmlTextToCheck = ''; if (Object.prototype.toString.call(range) == '[object ControlRangeCollection]') { htmlTextToCheck = control_range.item(0).outerHTML; } else { htmlTextToCheck = range.htmlText; } // This fixes some probs IE has with Paragraphs and list if (HTMLArea.is_ie && (htmlTextToCheck.indexOf('<p') != -1 || htmlTextToCheck.indexOf('<P') != -1 || htmlTextToCheck.indexOf('<li') != -1 || htmlTextToCheck.indexOf('<LI') != -1)) { //See bug #987 for details on why this is done //It avoids <a> tags outside <p> tags var start_new = htmlTextToCheck.substring(0, htmlTextToCheck.indexOf('>') + 1); var end_new = htmlTextToCheck.substring(htmlTextToCheck.lastIndexOf('<')); var new_middle = htmlTextToCheck.substring(start_new.length, htmlTextToCheck.length - end_new.length); html = '<a href="' + param["url"] + '"'; if (param["class_name"] != "") { html += ' class="' + htmlspecialchars(param["class_name"]).replace(/\'/gi, "\\'") + '"'; } if (param["id_name"] != "") { html += ' id="' + htmlspecialchars(param["id_name"]).replace(/\'/gi, "\\'") + '"'; } if (param["target"] != "") { html += ' target="' + htmlspecialchars(param["target"]).replace(/\'/gi, "\\'") + '"'; } if (param["status_text"] != "") { html += ' onMouseOver="javascript: window.status=\'' + htmlspecialchars(param["status_text"]).replace(/\'/gi, "\\'") + '\'; return true;" onMouseOut="javascript: window.status=\'\'; return true;"'; } if (param["link_title"] != "") { html += ' title="' + htmlspecialchars(param["link_title"]) + '"'; } if (param["onClick"] != null && param["onClick"] != "") { html += ' onClick="' + param["onClick"] + '"'; } // insert file summary keyword new_middle = new_middle.replace(/%asset_summary_[0-9]+%/gim, ''); if (param['show_summary'] && param['assetid']) { html += '>' + new_middle + "%asset_summary_" + param['assetid'] + "%" + '</a>'; if (insert_asset_summary_span) { html = '<span class="include_asset_summary">' + html + '</span>'; } } else { html += '>' + new_middle + '</a>'; } editor.insertHTML(start_new + html + end_new, range); } else { //We don't have IE, or there is no paragraph present to warrant different handling html += '<a href="' + param["url"] + '"'; if (param["class_name"] != "") { html += ' class="' + htmlspecialchars(param["class_name"]).replace(/\'/gi, "\\'") + '"'; } if (param["id_name"] != "") { html += ' id="' + htmlspecialchars(param["id_name"]).replace(/\'/gi, "\\'") + '"'; } if (param["target"] != "") { html += ' target="' + htmlspecialchars(param["target"]).replace(/\'/gi, "\\'") + '"'; } if (param["status_text"] != "") { html += ' onMouseOver="javascript: window.status=\'' + htmlspecialchars(param["status_text"]).replace(/\'/gi, "\\'") + '\'; return true;" onMouseOut="javascript: window.status=\'\'; return true;"'; } if (param["link_title"] != "") { html += ' title="' + htmlspecialchars(param["link_title"]) + '"'; } if (param["onClick"] != null && param["onClick"] != "") { html += ' onClick="' + param["onClick"] + '"'; } // remove existing link(s) before inserting a new link if (current_a) { current_a.parentNode.removeChild(current_a); } else { // overlap/partially overlap (existing links) // note: regex doesn't work on nested tags, like in '<a>one<a>two</a>one</a>' var e = '<a[^>]*>(.*?)</a>'; var re = new RegExp(e, "gim"); inside_html = inside_html.replace(re, "$1"); } // insert file summary keyword inside_html = inside_html.replace(/%asset_summary_[0-9]+%/gim, ''); if (param['show_summary'] && param['assetid']) { html += '>' + inside_html + "%asset_summary_" + param['assetid'] + "%" + '</a>'; if (insert_asset_summary_span) { html = '<span class="include_asset_summary">' + html + '</span>'; } } else { html += '>' + inside_html + '</a>'; } // replace with new URL editor.insertHTML(html, range); } }// end if param exists }, null); }; </script> <script type="text/javascript" src="https://www.iucr.org/__lib/js/general.js"></script> <script type="text/javascript" src="https://www.iucr.org/__fudge/var_serialise/var_serialise.js"></script> <script type="text/javascript" language="Javascript"> var wysiwyg_editing = true; // just so that onclick links don't execute in wysiwyg // Called when the user clicks on "Insert Anchor" button HTMLArea.prototype._matrixInsertAnchor = function() { var editor = this; // for nested functions // OK, let's create the current args array that we'll pass to the dialog var currArgs = new Object(); currArgs["name"] = ""; var sel = this._getSelection(); var range = this._createRange(sel); var text_range = false; // OK, so they have a control object selected, let's try and make it a text selection if (sel.type && sel.type.toLowerCase() == "control") { var control_range = this._createRange(sel); var text_range = this._createTextRange(sel); if (text_range != null) { text_range = true; editor.selectNodeContents(control_range(0)); } else { alert(js_translate('object_requires_selection')); sel.empty(); return; } sel = this._getSelection(); range = this._createRange(sel); }//end if a control var inside_html = ''; var current_a = this.getClosest("a"); if (current_a) { if (HTMLArea.is_ie) { inside_html = current_a.innerHTML; } else { this.selectNodeContents(current_a); inside_html = editor.getSelectedHTML(); } } else { inside_html = editor.getSelectedHTML(); } sel = this._getSelection(); range = this._createRange(sel); // Is this aready a link? if (current_a) { if (typeof(visual_aid_mode) != 'undefined' && visual_aid_mode) { // If visual aid is being used now, remove it before processing // we keep the copy here in the case of canceling var copied_html = current_a.innerHTML; if (HTMLArea.is_gecko) { current_a.innerHTML = current_a.innerHTML.replace(/<span id="wysiwyg-visual-aid-plugin-anchor"[^>]*>A[^>]*<\/span>/, ""); } else if (HTMLArea.is_ie) { var e = '<span id=wysiwyg-visual-aid-plugin-anchor[^>]*>A[^>]*<\/span>'; var re = new RegExp(e, "ig"); current_a.innerHTML = current_a.innerHTML.replace(re, ''); } } var e = '^(\<a [^\>]+>)(.*)</a>$'; var re = new RegExp(e, "i"); var tag_html = editor.getSelectedHTML().replace(re, "$1"); var re = new RegExp("\n", "gi"); var tag_html = tag_html.replace(re, ""); currArgs["name"] = current_a.name; re = new RegExp('if \\(!window\\.wysiwyg_editing\\)[\\s]+\\{[\\s]+window\\.open\\([\'"]([^\'"]+)[\'"], [\'"][0-9]+[\'"], [\'"]([^\'"]+)[\'"]\\);', "gi"); results = re.exec(tag_html); if (results != null) { currArgs["name"] = results[1]; }// end if // else not a link so check for paragraphs } else { // convert all para tags to lowercase var para_html = inside_html.replace(/(<\/?)P/gi, "$1p"); // OK so we have some paragraph tags caught up in the mix, let's see what we can do with them // because we don't want our href's going around paragraph tags if (para_html.indexOf("<p") > -1) { // if the position of the first tag is the same as the last then we have only one paragraph // we don't want more than one paragraph because these can start or end from half-way through // a para, which would break the formatting when we go to re-insert the text with the href if (para_html.indexOf("<p") != para_html.lastIndexOf("<p")) { alert("Please select only one paragraph to link at a time."); return; } }// end if paragraphs exist }// end if existing link var in_popup = '0'; if (this._inPopup == true) { in_popup = '1'; } editor_calendar_event_single_0_1442._object = this; var strPage = "matrix_insert_anchor/insert_anchor.php?&name=" + escape(currArgs["name"]) + "&editor_name=" + escape("calendar_event_single_0_1442") + "&in_popup=" + escape(in_popup); this._popupDialog("matrixInsertAnchor", strPage, 480, 300, true, function(param) { if (!param) { // user must have pressed Cancel if (typeof(visual_aid_mode) != 'undefined' && visual_aid_mode) { if (current_a != null) { current_a.innerHTML = copied_html; } } return false; } if (param["remove"] == "1") { if (current_a != null) { // remove this anchor tag var current_html = current_a.innerHTML; var anchor_inner_html = current_html; // Brackets within the HTML must be quoted when in Visual Aid mode, so the anchor can be located if (typeof(visual_aid_mode) != 'undefined' && visual_aid_mode) { if (HTMLArea.is_gecko) { current_html = current_html.replace(/\(/, "\\\("); current_html = current_html.replace(/\)/, "\\\)"); // Remove the Visual Aid code including the anchor anchor_inner_html = anchor_inner_html.replace(/<span id="wysiwyg-visual-aid-plugin-anchor".*<\/span>/, ''); } else if (HTMLArea.is_ie) { var re = new RegExp("\\(", "ig"); current_html = current_html.replace(re, "\\\("); re = new RegExp("\\)", "ig"); current_html = current_html.replace(re, "\\\)"); re = new RegExp("<span id=wysiwyg-visual-aid-plugin-anchor.*<\/span>", "ig"); anchor_inner_html = anchor_inner_html.replace(re, ''); } } var parent = current_a.parentNode; if (HTMLArea.is_gecko) { var e = '(<a.*name="' + param["name"] + '"[^>]*>)' + current_html + '</a>'; } else if (HTMLArea.is_ie) { var e = '(<a.*name="?' + param["name"] + '"?[^>]*>)' + current_html + '</a>'; } var re = new RegExp(e, "ig"); var new_html = parent.innerHTML.replace(re, anchor_inner_html); parent.innerHTML = new_html; } } else { var visual_aid_tag = ""; var visual_aid_style = 'padding-left: 1px; padding-right: 1px; padding-top: 1px; padding-bottom: 1px; background-color : #37DF5E; font: 10px Verdana,Tahoma,sans-serif; font-weight: bold; border-left: 1px solid; border-right: 1px solid; border-top: 1px solid; border-bottom: 1px solid;'; if (param["name"] != "") { if (typeof(visual_aid_mode) != 'undefined' && visual_aid_mode) { visual_aid_tag = '<span id="wysiwyg-visual-aid-plugin-anchor" style="' + visual_aid_style + '">A "' + param["name"] + '"</span>'; } if (current_a) { // editing if (param["name"] != current_a.getAttribute("name")) { if (HTMLArea.is_gecko) { current_a.setAttribute("name", param["name"]); current_a.setAttribute("id", param["name"]); current_a.innerHTML = visual_aid_tag + current_a.innerHTML; } else if (HTMLArea.is_ie) { // somehow IE can not update the name attribute value in the wysiwyg // this is just mysterious... // Also some trickery to spot lack of quotes in IE for one-word attribute values var e = '<A( id="?' + current_a.getAttribute("name") + '"?){0,1} name="?' + current_a.getAttribute("name") + '"?>'; var re = new RegExp(e, "gi"); var replacement = '<A id="' + param["name"] + '" name="' + param["name"] + '">' + visual_aid_tag; current_a.parentNode.innerHTML = current_a.parentNode.innerHTML.replace(re, replacement); } } } else { // adding var para = new RegExp("^[\n\t\s]*<P[^>]*>(.*)<\/P>", "gim") var insideP = inside_html.replace(para, "$1"); if (insideP != inside_html) { var html = '<p><a name="' + param["name"] + '" id="' + param["name"]; html += '">' + visual_aid_tag + insideP + '</a></p>'; } else { var html = '<a name="' + param["name"] + '" id="' + param["name"]; html += '">' + visual_aid_tag + inside_html + '</a>'; } // replace with new URL editor.insertHTML(html, range); } }// end if param exists } // unselect the selection if (HTMLArea.is_ie) { range.execCommand("Unselect"); } else { sel.removeAllRanges(); } }, null); }; </script> <script type="text/javascript" language="Javascript"> // Called when the user clicks on "InsertImage" button HTMLArea.prototype._matrixinsertImage = function() { var editor = this; // for nested functions var url = ""; var align = ""; var width = ""; var height = ""; var alt = ""; var title = ""; var longdesc = ""; var hspace = ""; var vspace = ""; var border = "0"; var imageid = "0"; var image_class = ""; var image_id = ""; var is_image = false; var sel = this._getSelection(); var range = this._createRange(sel); // loop through and try and find a selected image tag if (HTMLArea.is_gecko) { var fragment = this._doc.createDocumentFragment(); var div = this._doc.createElement("div"); div.innerHTML = this.getSelectedHTML(); while (div.firstChild) { if (div.firstChild.tagName == "IMG") { is_image = true; var image_tag = div.firstChild; break; } // the following call also removes the node from div fragment.appendChild(div.firstChild); } } else if (HTMLArea.is_ie) { if(range.length) { if (range.item(0).tagName == "IMG") { is_image = true; var image_tag = range.item(0); } } } // if there is an existing image, get its properties if (is_image && image_tag) { url = image_tag.src; align = image_tag.align; alt = image_tag.alt; title = image_tag.title; image_class = image_tag.className; image_id = image_tag.id; width = (!image_tag.width) ? "" : image_tag.width; height = (!image_tag.height) ? "" : image_tag.height; hspace = (!image_tag.hspace) ? "" : image_tag.hspace; vspace = (!image_tag.vspace) ? "" : image_tag.vspace; // Bug #1708 - If border attribute is used in ima tag, change it to style attribute. if (!image_tag.border && !image_tag.style.border) { border = "0"; } else { if (image_tag.border) { border = image_tag.border; } else if (image_tag.style.border) { border = image_tag.style.border; border = border.match(/(\d{1})px/)[1]; } } longdesc = (!image_tag.longDesc) ? "" : image_tag.longDesc; if (image_tag.longDesc) { var result = image_tag.longDesc.match(/(.+)\/\?a=(\d+)/); if (result != null) { // longdesc is from assetid longdesc = result[2]; } else { // long desc is manually typed e = 'http[s]?://www.iucr.org/calendar/etc/add-meeting'; re = new RegExp(e, "gi"); longdesc = image_tag.longDesc.replace(re, ""); } } else { longdesc = ""; } imageid = editor.make_relative_hrefs(url); e = '.*\\?a=([0-9]+)((:[^$]*)\\$)?'; re = new RegExp(e, "gi"); imageid = imageid.replace(re, "$1$3"); } var in_popup = '0'; if (this._inPopup == true) { in_popup = '1'; } editor_calendar_event_single_0_1442._object = this; strPage = "matrix_insert_image/insert_image_frames.php?f_imageid=" + encodeURIComponent(imageid) + "&f_align=" + encodeURIComponent(align) + "&f_width=" + encodeURIComponent(width) + "&f_height=" + encodeURIComponent(height) + "&f_alt=" + encodeURIComponent(alt) + "&f_title=" + encodeURIComponent(title) + "&f_longdesc=" + encodeURIComponent(longdesc) + "&f_horiz=" + encodeURIComponent(hspace) + "&f_vert=" + encodeURIComponent(vspace) + "&f_border=" + encodeURIComponent(border) + "&f_image_class=" + encodeURIComponent(image_class) + "&f_image_id=" + encodeURIComponent(image_id) + "&editor_name=" + encodeURIComponent("calendar_event_single_0_1442") + "&in_popup=" + encodeURIComponent(in_popup); var popup_height = 630; // A bit more breathing room for Safari if (HTMLArea.is_safari) popup_height += 35; if (HTMLArea.is_linux && HTMLArea.is_gecko) popup_height += 35; this._popupDialog("matrixInsertImage", strPage, 800, popup_height, true, function(param) { if (!param) { // user must have pressed Cancel return false; } if (param["f_imageid"] != 0) { var url = './?a=' + param["f_imageid"]; // shadow asset .. needs terminating exclamation mark if (param["f_imageid"].search(/:/) != -1) { url += '$'; } } else { if (is_image && image_tag) { if (image_tag.src != '') { url = image_tag.src; } else { url = ''; } } } var html = '<img src="' + url + '"'; if (param["f_align"] != "") { html += ' align="' + param["f_align"] + '"'; } if (param["f_width"] != "") { html += ' width="' + param["f_width"] + '"'; } if (param["f_height"] != "") { html += ' height="' + param["f_height"] + '"'; } if (param["f_alt"] != "") { html += ' alt="' + param["f_alt"] + '"'; } if (param["f_title"] != "") { html += ' title="' + param["f_title"] + '"'; } if (param["f_image_id"] != "") { html += ' id="' + param["f_image_id"] + '"'; } if (param["f_image_class"] != "") { html += ' class="' + param["f_image_class"] + '"'; } if (param["f_longdesc"] != null && param["f_longdesc"] != "") { var result = param["f_longdesc"].match(/(\d)+/); if (result != null) { if (result[1] != "0") { html += ' longdesc="https://www.iucr.org' + '/?a=' + param["f_longdesc"] + '"'; } } else { html += ' longdesc="' + param["f_longdesc"] + '"'; } } if (param["f_horiz"] != "") { html += ' hspace="' + param["f_horiz"] + '"'; } if (param["f_vert"] != "") { html += ' vspace="' + param["f_vert"] + '"'; } if (param["f_border"] != "") { html += ' style="border: ' + param["f_border"] + 'px solid rgb(0, 0, 0);"'; } html += '>'; if (!is_image || HTMLArea.is_gecko) { // replace text with new image editor.insertHTML(html, range); } else { // we are replacing an existing image in IE image_tag.outerHTML = html; } }, null); }; </script> <script type="text/javascript" language="Javascript"> // Called when the user clicks on "InsertImage" button HTMLArea.prototype._matrixEmbedMovie = function() { var editor = this; // for nested functions var sel = this._getSelection(); var range = this._createRange(sel); var style = ""; var width = ""; var height = ""; var fileid = "0"; var auto_start = "0"; var show_controls = "0"; var embed_loop = "0"; var is_file = false; var fileurl = ''; var fileprotocol = ''; // loop through and try and find a selected embed tag if (HTMLArea.is_gecko) { var fragment = this._doc.createDocumentFragment(); var div = this._doc.createElement("div"); div.innerHTML = this.getSelectedHTML(); while (div.firstChild) { if (div.firstChild.tagName == "IMG" && div.firstChild.getAttribute('sq_embeded') == "1") { is_file = true; var embed_tag = div.firstChild; break; } // the following call also removes the node from div fragment.appendChild(div.firstChild); } } else if (HTMLArea.is_ie) { if (range.length) { if (range.item(0).tagName == "IMG" && range.item(0).getAttribute('sq_embeded') == "1") { is_file = true; var embed_tag = range.item(0); } } } // if there is an existing image, get its properties if (is_file && embed_tag) { fileid = embed_tag.getAttribute('fileid'); if (fileid != null) { fileurl = './?a=' + fileid; } else { fileparts = embed_tag.getAttribute('fileurl'); if (fileparts != null) { if (fileparts.substring(0, 7) == 'http://') { fileprotocol = 'http://'; fileurl = fileparts.substring(7); } else if (fileparts.substring(0, 8) == 'https://') { fileprotocol = 'https://'; fileurl = fileparts.substring(8); } else if (fileparts.substring(0, 6) == 'ftp://') { fileprotocol = 'ftp://'; fileurl = fileparts.substring(6); } } } auto_start = embed_tag.getAttribute('auto_start'); show_controls = embed_tag.getAttribute('show_controls'); embed_loop = embed_tag.getAttribute('embed_loop'); // try getting the width and height from the style style = embed_tag.style; width = style.width; height = style.height; // if that fails, lets try getting them from the tag if (!width) { width = embed_tag.getAttribute('width'); } if (!height) { height = embed_tag.getAttribute('height'); } // make sure they are numbers width = parseInt(width); height = parseInt(height); // failsafe if (!width) { width = "" } if (!height) { height = "" } } var in_popup = '0'; if (this._inPopup == true) { in_popup = '1'; } editor_calendar_event_single_0_1442._object = this; strPage = "matrix_embed_movie/embed_movie_frames.php?f_fileurl=" + escape(fileurl) + "&f_fileprotocol=" + escape(fileprotocol) + "&f_width=" + escape(width) + "&f_height=" + escape(height) + "&f_auto_start=" + escape(auto_start) + "&f_show_controls=" + escape(show_controls) + "&f_embed_loop=" + escape(embed_loop) + "&editor_name=" + escape("calendar_event_single_0_1442") + "&in_popup=" + escape(in_popup); this._popupDialog("matrixEmbedMovie", strPage, 780, 500, true, function(param) { if (!param) { // user must have pressed Cancel return false; } var html = '<img sq_embeded="1" src="https://www.iucr.org/__fudge/wysiwyg/plugins/matrix_embed_movie/embedded_object.gif"'; html += ' style="width: ' + param["f_width"] + 'px; height: ' + param["f_height"] + 'px; border: 2px dashed black;"'; html += ' width="' + param["f_width"] + '"'; html += ' height="' + param["f_height"] + '"'; if (param["use_external"] == true) { html += ' fileurl="' + param["external_url"] + '"'; } else { html += ' fileid="' + param["f_fileid"] + '"'; } html += ' auto_start="' + param["f_auto_start"] + '"'; html += ' show_controls="' + param["f_show_controls"] + '"'; html += ' embed_loop="' + param["f_embed_loop"] + '"'; html += '>'; if (!is_file || HTMLArea.is_gecko) { // replace text with new image editor.insertHTML(html, range); } else { // we are replacing an existing image in IE embed_tag.outerHTML = html; } }, null); }; </script> <script type="text/javascript" language="Javascript"> // Called when the user clicks on "InsertImage" button HTMLArea.prototype._matrixEmbedYouTube = function() { var editor = this; // for nested functions var sel = this._getSelection(); var range = this._createRange(sel); var style = ""; var width = "480"; var height = "385"; var auto_start = "0"; var loop = "0"; var full_screen = "1"; var is_file = false; var vid = ""; var video_url = ""; var show_border = ""; var colour1 = ""; var colour2 = ""; var rel = ""; var egm = ""; var enable_js = ""; // loop through and try and find a selected embed tag if (HTMLArea.is_gecko) { var fragment = this._doc.createDocumentFragment(); var div = this._doc.createElement("div"); div.innerHTML = this.getSelectedHTML(); while (div.firstChild) { if (div.firstChild.tagName == "IMG" && div.firstChild.getAttribute('sq_youtube_embeded') == "1") { is_file = true; var embed_tag = div.firstChild; break; } // the following call also removes the node from div fragment.appendChild(div.firstChild); } } else if (HTMLArea.is_ie) { if (range.length) { if (range.item(0).tagName == "IMG" && range.item(0).getAttribute('sq_youtube_embeded') == "1") { is_file = true; var embed_tag = range.item(0); } } } // if there is an existing image, get its properties if (is_file && embed_tag) { vid = embed_tag.getAttribute('vid'); video_url = embed_tag.getAttribute('video_url'); auto_start = embed_tag.getAttribute('auto_start'); loop = embed_tag.getAttribute('loop'); full_screen = embed_tag.getAttribute('full_screen'); show_border = embed_tag.getAttribute('show_border'); colour1 = embed_tag.getAttribute('colour1'); colour2 = embed_tag.getAttribute('colour2'); width = embed_tag.getAttribute('width'); height = embed_tag.getAttribute('height'); rel = embed_tag.getAttribute('rel'); egm = embed_tag.getAttribute('egm'); enable_js = embed_tag.getAttribute('enable_js'); // make sure they are numbers width = parseInt(width); height = parseInt(height); // failsafe if (!width) { width = "" } if (!height) { height = "" } } var in_popup = '0'; if (this._inPopup == true) { in_popup = '1'; } editor_calendar_event_single_0_1442._object = this; strPage = "matrix_embed_youtube/embed_youtube_frames.php?f_vid=" + escape(vid) + "&f_video_url=" + escape(video_url) + "&f_width=" + escape(width) + "&f_height=" + escape(height) + "&f_auto_start=" + escape(auto_start) + "&f_loop=" + escape(loop) + "&f_full_screen=" + escape(full_screen) + "&f_show_border=" + escape(show_border) + "&f_colour1=" + escape(colour1) + "&f_colour2=" + escape(colour2) + "&f_rel=" + escape(rel) + "&f_egm=" + escape(egm) + "&f_enable_js=" + escape(enable_js) + "&editor_name=" + escape("calendar_event_single_0_1442") + "&in_popup=" + escape(in_popup); var popup_height = 300; // A bit more breathing room for Safari if (HTMLArea.is_safari) popup_height += 15; this._popupDialog("matrixEmbedYouTube", strPage, 780, popup_height, true, function(param) { if (!param) { // user must have pressed Cancel return false; } var html = '<img sq_youtube_embeded="1" src="https://www.iucr.org/__fudge/wysiwyg/plugins/matrix_embed_youtube/embedded_object.gif"'; html += ' style="width: ' + param["f_width"] + 'px; height: ' + param["f_height"] + 'px; border: 2px dashed black;"'; html += ' width="' + param["f_width"] + '"'; html += ' height="' + param["f_height"] + '"'; html += ' auto_start="' + param["f_auto_start"] + '"'; html += ' loop="' + param["f_loop"] + '"'; html += ' full_screen="' + param["f_full_screen"] + '"'; html += ' vid="' + param["f_vid"] + '"'; html += ' video_url="' + param["f_video_url"] + '"'; html += ' show_border="' + param["f_show_border"] + '"'; html += ' colour1="' + param["f_colour1"] + '"'; html += ' colour2="' + param["f_colour2"] + '"'; html += ' rel="' + param["f_rel"] + '"'; html += ' egm="' + param["f_egm"] + '"'; html += ' enable_js="' + param["f_enable_js"] + '"'; html += '>'; if (!is_file || HTMLArea.is_gecko) { // replace text with new image editor.insertHTML(html, range); } else { // we are replacing an existing image in IE embed_tag.outerHTML = html; } }, null); }; </script> <script type="text/javascript" src="https://www.iucr.org/__lib/js/general.js"></script> <script type="text/javascript" src="https://www.iucr.org/__fudge/var_serialise/var_serialise.js"></script> <script type="text/javascript" language="Javascript"> var wysiwyg_editing = true; // just so that onclick links don't execute in wysiwyg // Called when the user clicks on "Insert Abbreviation" button HTMLArea.prototype._matrixInsertAbbr = function() { var editor = this; // for nested functions // OK, let's create the current args array that we'll pass to the dialog var currArgs = new Object(); currArgs["title"] = ""; var sel = this._getSelection(); var range = this._createRange(sel); var text_range = false; // OK, so they have a control object selected, let's try and make it a text selection if (sel.type && sel.type.toLowerCase() == "control") { var control_range = this._createRange(sel); var text_range = this._createTextRange(sel); if (text_range != null) { text_range = true; editor.selectNodeContents(control_range(0)); } else { alert(js_translate('object_requires_selection')); sel.empty(); return; } sel = this._getSelection(); range = this._createRange(sel); }// end if a control var inside_html = ''; var current_abbr = this.getClosest("abbr"); if (current_abbr) { if (HTMLArea.is_ie) { inside_html = current_abbr.innerHTML; } else { this.selectNodeContents(current_abbr); inside_html = editor.getSelectedHTML(); } this.selectNodeContents(current_abbr); } else { inside_html = editor.getSelectedHTML(); } sel = this._getSelection(); range = this._createRange(sel); // Is this aready an abbreviation? if (current_abbr) { var e = '^(\<abbr [^\>]+>)(.*)</abbr>$'; var re = new RegExp(e, "i"); var tag_html = editor.getSelectedHTML().replace(re, "$1"); var re = new RegExp("\n", "gi"); var tag_html = tag_html.replace(re, ""); currArgs["title"] = current_abbr.title; re = new RegExp('if \\(!window\\.wysiwyg_editing\\)[\\s]+\\{[\\s]+window\\.open\\([\'"]([^\'"]+)[\'"], [\'"][0-9]+[\'"], [\'"]([^\'"]+)[\'"]\\);', "gi"); results = re.exec(tag_html); if (results != null) { currArgs["title"] = results[1]; }// end if // else not a link so check for paragraphs } else { // convert all para tags to lowercase var para_html = inside_html.replace(/(<\/?)P/gi, "$1p"); // OK so we have some paragraph tags caught up in the mix, let's see what we can do with them // because we don't want our href's going around paragraph tags if (para_html.indexOf("<p") > -1) { // if the position of the first tag is the same as the last then we have only one paragraph // we don't want more than one paragraph because these can start or end from half-way through // a para, which would break the formatting when we go to re-insert the text with the href if (para_html.indexOf("<p") != para_html.lastIndexOf("<p")) { alert(js_translate('select_one_paragraph_at_a_time')); return; } }// end if paragraphs exist }// end if existing link var in_popup = '0'; if (this._inPopup == true) { in_popup = '1'; } editor_calendar_event_single_0_1442._object = this; var strPage = "matrix_accessibility/insert_abbr.php?&title=" + escape(currArgs["title"]) + "&abbr=" + escape(inside_html) +"&editor_name=" + escape("calendar_event_single_0_1442") + "&in_popup=" + escape(in_popup); var popup_width = 410; // A bit more breathing room for Safari if (HTMLArea.is_safari) popup_width += 15; this._popupDialog("matrixInsertAbbr", strPage, popup_width, 210, true, function(param) { if (!param) { // user must have pressed Cancel return false; } if (param["title"] != "") { if (param["abbr"] != inside_html) { inside_html = param["abbr"]; } var html = '<abbr title="' + param["title"] + '">' + inside_html + '</abbr>'; // Update abbreviation if selected, otherwise create a new one if (current_abbr) { current_abbr.title = param["title"]; current_abbr.innerHTML = inside_html; } else { if (HTMLArea.is_gecko) { editor.insertHTML(html, range); } else if (HTMLArea.is_ie) { range.pasteHTML(html); } } }// end if param exists }, null); }; // Called when the user clicks on "Insert Acronym" button HTMLArea.prototype._matrixInsertAcronym = function() { var editor = this; // for nested functions // OK, let's create the current args array that we'll pass to the dialog var currArgs = new Object(); currArgs["title"] = ""; var sel = this._getSelection(); var range = this._createRange(sel); var text_range = false; // OK, so they have a control object selected, let's try and make it a text selection if (sel.type && sel.type.toLowerCase() == "control") { var control_range = this._createRange(sel); var text_range = this._createTextRange(sel); if (text_range != null) { text_range = true; editor.selectNodeContents(control_range(0)); } else { alert(js_translate('object_requires_selection')); sel.empty(); return; } sel = this._getSelection(); range = this._createRange(sel); }// end if a control var inside_html = ''; var current_acronym = this.getClosest("acronym"); if (current_acronym) { if (HTMLArea.is_ie) { inside_html = current_acronym.innerHTML; } else { this.selectNodeContents(current_acronym); inside_html = editor.getSelectedHTML(); } this.selectNodeContents(current_acronym); } else { inside_html = editor.getSelectedHTML(); } sel = this._getSelection(); range = this._createRange(sel); // Is this aready an abbreviation? if (current_acronym) { var e = '^(\<acronym [^\>]+>)(.*)</acronym>$'; var re = new RegExp(e, "i"); var tag_html = editor.getSelectedHTML().replace(re, "$1"); var re = new RegExp("\n", "gi"); var tag_html = tag_html.replace(re, ""); currArgs["title"] = current_acronym.title; re = new RegExp('if \\(!window\\.wysiwyg_editing\\)[\\s]+\\{[\\s]+window\\.open\\([\'"]([^\'"]+)[\'"], [\'"][0-9]+[\'"], [\'"]([^\'"]+)[\'"]\\);', "gi"); results = re.exec(tag_html); if (results != null) { currArgs["title"] = results[1]; }// end if // else not a link so check for paragraphs } else { // convert all para tags to lowercase var para_html = inside_html.replace(/(<\/?)P/gi, "$1p"); // OK so we have some paragraph tags caught up in the mix, let's see what we can do with them // because we don't want our href's going around paragraph tags if (para_html.indexOf("<p") > -1) { // if the position of the first tag is the same as the last then we have only one paragraph // we don't want more than one paragraph because these can start or end from half-way through // a para, which would break the formatting when we go to re-insert the text with the href if (para_html.indexOf("<p") != para_html.lastIndexOf("<p")) { alert("Please select only one paragraph to link at a time."); return; } }// end if paragraphs exist }// end if existing link var in_popup = '0'; if (this._inPopup == true) { in_popup = '1'; } editor_calendar_event_single_0_1442._object = this; var strPage = "matrix_accessibility/insert_acronym.php?&title=" + escape(currArgs["title"]) + "&acronym=" + escape(inside_html) +"&editor_name=" + escape("calendar_event_single_0_1442") + "&in_popup=" + escape(in_popup); var popup_width = 410; // A bit more breathing room for Safari if (HTMLArea.is_safari) popup_width += 15; this._popupDialog("matrixInsertAcronym", strPage, popup_width, 210, true, function(param) { if (!param) { // user must have pressed Cancel return false; } if (param["title"] != "") { if (param["acronym"] != inside_html) { inside_html = param["acronym"]; } var html = '<acronym title="' + param["title"] + '">' + inside_html + '</acronym>'; // Update acronym if selected, otherwise create a if (current_acronym) { current_acronym.title = param["title"]; current_acronym.innerHTML = inside_html; } else { editor.insertHTML(html, range); } }// end if param exists }, null); }; </script> <script type="text/javascript"> function expandKeywords() {} </script> <script type="text/javascript" src="https://www.iucr.org/__lib/js/general.js"></script> <script type="text/javascript" language="Javascript"> // Called when the user clicks on "Insert Special Character" button HTMLArea.prototype._insertSpecialChar = function() { var editor = this; // for nested functions var sel = this._getSelection(); var range = this._createRange(sel); var in_popup = '0'; if (this._inPopup == true) { in_popup = '1'; } var Width = 300; var Height = 380; editor_calendar_event_single_0_1442._object = this; var strPage = "special_chars/char_map.php?width=" + Width + '&height=' + Height; this._popupDialog("insertSpecialChar", strPage, Width, Height, true, function(param) { if (param) { var html = param['entity']; html = html.toString(); editor.insertHTML(html, range); }// end if param exists }, null); }; HTMLArea.prototype.entities = Array( '&Agrave;','&agrave;','&Aacute;','&aacute;','&Acirc;','&acirc;','&Atilde;','&atilde;','&Auml;','&auml;','&Aring;','&aring;','&AElig;','&aelig;','&Ccedil;','&ccedil;','&ETH;','&eth;','&Egrave;','&egrave;','&Eacute;','&eacute;','&Ecirc;','&ecirc;','&Euml;','&euml;','&Igrave;','&igrave;','&Iacute;','&iacute','&Icirc;','&icirc;','&Iuml;','&iuml;','&micro;','&Ntilde;','&ntilde;','&Ograve;','&ograve;','&Oacute;','&oacute;','&Ocirc;','&ocirc;','&Otilde;','&otilde;','&Ouml;','&ouml;','&Oslash;','&oslash;','&szlig;','&THORN;','&thorn;','&Ugrave;','&ugrave;','&Uacute;','&uacute;','&Ucirc;','&ucirc;','&Uuml;','&uuml;','&Yacute;','&yacute;','&yuml;','&uml;','&macr;','&acute;','&cedil;','&iexcl;','&iquest;','&middot;','&brvbar;','&laquo;','&raquo;','&para;','&sect;','&copy;','&reg;','&sup1;','&sup2;','&sup3;','&times;','&divide;','&frac14;','&frac12;','&frac34;','&ordf;','&ordm;','&not;','&deg;','&plusmn;','&curren;','&cent;','&pound;','&yen;','&Delta;','&fnof;','&Omega;','&OElig;','&oelig;','&Scaron;','&scaron;','&Yuml;','&circ;','&tilde;','&ndash;','&mdash;','&dagger;','&Dagger;','&bull;','&hellip;','&lsquo;','&rsquo;','&ldquo;','&rdquo;','&lsaquo;','&rsaquo;','&trade;','&radic;','&infin;','&int;','&part;','&ne;','&le;','&ge;','&sum;','&permil;','&prod;','&pi;','&loz;','&shy;', '&dummycharactercode'); </script> <script type="text/javascript" language="Javascript"> HTMLArea.prototype._definitionListFilter = function(node) { switch (node.tagName) { case 'P': case 'DT': case 'DD' : return true; break; default : return false; break; } } // Generate the definition list. // This function is called when some text is selected in the WYSIWYG. // It attempts to create the definition list from the selected text. HTMLArea.prototype._definitionListWithSelection = function(type) { var editor = this; // for nested functions var sel = this._getSelection(); var range = this._createRange(sel); var parent = this.getParentElement(); var type_string = ((type == "DT") ? "term" : "definition"); var selected_html = ""; if (HTMLArea.is_gecko) { var parent_node = range.startContainer.parentNode; var start_node = range.startContainer; var end_node = range.endContainer; var start_text = ""; var end_text = ""; if (start_node.nodeType == 1) { start_text = start_node.innerHTML; } else if (start_node.nodeType == 3) { start_text = start_node.nodeValue; } if (end_node.nodeType == 1) { end_text = end_node.innerHTML; } else if (end_node.nodeType == 3) { end_text = end_node.nodeValue; } while (this._definitionListFilter(parent_node)) { parent_node = parent_node.parentNode; } var start_index = 0; var end_index = 0; var children = parent.childNodes; var valid_node_indexes = Array(); for (var i=0; i < children.length; i++) { if (children[i].nodeType == 1 && children[i].innerHTML != "") { if (children[i].innerHTML == start_text) start_index = i; else if (children[i].innerHTML == end_text) end_index = i; valid_node_indexes.push(i); } else if (children[i].nodeType == 3) { var tmp = children[i].nodeValue.replace(/\s/g, ""); if (tmp != "") { if (tmp == start_text.replace(/\s/g, "")) start_index = i; else if (tmp == end_text.replace(/\s/g, "")) end_index = i; valid_node_indexes.push(i); } } } // Create a definition list dl = this._doc.createElement("DL"); var remove_list = Array(); for (var j=0; j < valid_node_indexes.length; j++) { var index = valid_node_indexes[j]; if (index >= start_index && index <= end_index) { if (children[index].tagName == "DT" || children[index].tagName == "DD") { if (type_string == children[index].tagName) continue; tmp = this._doc.createElement(type); tmp.innerHTML = children[index].innerHTML; parent_node.replaceChild(tmp, children[index]); } else { tmp = this._doc.createElement(type); if (children[index].nodeType == 1 || children[index].nodeType == 3) { switch (children[index].nodeType) { case 1: tmp.innerHTML = children[index].innerHTML; break; case 3: tmp.innerHTML = children[index].nodeValue; break; } dl.appendChild(tmp); remove_list.push(children[index]); } } } } if (dl.childNodes.length > 0) { parent_node.insertBefore(dl, children[start_index]); for (var k=0; k < remove_list.length; k++) { parent_node.removeChild(remove_list[k]); } } } else if (HTMLArea.is_ie) { var selected_html = range.htmlText; var tmp = ""; var new_html = ""; var e = '<(P|DT|DD)>(.+)<\/(P|DT|DD)>|([^>]+)<BR>|([^>]+)'; var re = new RegExp(e, "ig"); var p_re = new RegExp('<(P)>([^>]+)<\/(P)>', "ig"); var d_re = new RegExp('<(DT|DD)>([^>]+)<\/(DT|DD)>', "ig"); var b_re = new RegExp('([^>]+)<BR>', "ig"); var n_re = new RegExp('([^>]+)', "ig"); var surround_dl = false; var warning = false; var result = selected_html.match(re); for (var i = 0; i < result.length; i++) { var curr_type = result[i].replace(re, "$1"); if (result[i].match(p_re)) { tmp += result[i].replace(p_re, "<" + type + ">$2<\/" + type + ">"); surround_dl = true; } else if (result[i].match(d_re)) { tmp += result[i].replace(d_re, "<" + type + ">$2<\/" + type + ">"); if (surround_dl) { warning = true; break; } } else if (result[i].match(b_re)) { tmp += result[i].replace(b_re, "<" + type + ">$1<\/" + type + ">"); surround_dl = true; } else if (result[i].match(n_re)) { tmp += result[i].replace(n_re, "<" + type + ">$1<\/" + type + ">"); surround_dl = true; } } if (!warning) { if (surround_dl) { new_html = '<DL>' + tmp + '</DL>'; } else if (!surround_dl) { new_html = tmp; } range.pasteHTML(new_html); } else { alert("Please do not select DD or DT tags with other types of tags."); } } } // Generate the definition list. // This function is called when there is no selection in the WYSIWYG. // It creates a new definition list HTMLArea.prototype._definitionList = function(type) { var sel = this._getSelection(); var range = this._createRange(sel); var parent = this.getParentElement(); var type_string = ((type == "DT") ? "term" : "definition"); if (parent.tagName != "DT" && parent.tagName != "DD") { // start a new definition list var dl = this._doc.createElement("dl"); var child = this._doc.createElement(type.toLowerCase()); var text = this._doc.createTextNode("Type the " + type_string); child.appendChild(text); dl.appendChild(child); parent.appendChild(dl); if (HTMLArea.is_gecko) { range.selectNode(text); //range.collapse(true); sel.removeAllRanges(); sel.addRange(range); } else if (HTMLArea.is_ie) { range.findText("Type the " + type_string); range.select(); } } else { var dl = parent.parentNode; var dl_parent = dl.parentNode; if (HTMLArea.is_gecko) { var data = parent.firstChild.data; } else if (HTMLArea.is_ie) { var data = parent.innerText; } if (type == parent.tagName) { // the same button is pressed, remove any tag dl.removeChild(parent); if (data != null && data != "Type the " + type_string) { var new_text = this._doc.createTextNode(data); dl_parent.appendChild(new_text); } if (dl.childNodes.length == 0) { dl_parent.removeChild(dl); } } else if (type != parent.tagName) { // the different tag is pressed, add a new one var new_child = this._doc.createElement(type); var next_type_string = ((type == "DT") ? "term" : "definition"); var prev_type_string = ((type == "DT") ? "definition" : "term"); if (data != ("Type the " + prev_type_string)) { var new_text = this._doc.createTextNode(data); } else { var new_text = this._doc.createTextNode("Type the " + next_type_string); } new_child.appendChild(new_text); dl.replaceChild(new_child, parent); } } } HTMLArea.prototype._handleDefinitionShortcut = function() { var editor = this; // for nested functions var sel = this._getSelection(); var range = this._createRange(sel); var parent = this.getParentElement(); var dl = parent.parentNode; if (HTMLArea.is_gecko) { var data = parent.firstChild.data; } else if (HTMLArea.is_ie) { var data = parent.innerText; } var next_type = (parent.tagName == "DT") ? "DD" : "DT"; var prev_type_string = ((next_type == "DT") ? "definition" : "term"); var type_string = ((next_type == "DT") ? "term" : "definition"); if (dl.tagName == "DL") { if (data == "" || data == "Type the " + prev_type_string) { // exit var dl_parent = dl.parentNode; dl.removeChild(parent); if (data != null && data != "Type the " + prev_type_string) { var new_text = this._doc.createTextNode(data); dl_parent.appendChild(new_text); } if (dl.childNodes.length == 0) { dl_parent.removeChild(dl); } } else { var new_child = this._doc.createElement(next_type.toLowerCase()); var new_text = this._doc.createTextNode("Type the " + type_string); new_child.appendChild(new_text); dl.appendChild(new_child); if (HTMLArea.is_gecko) { // open a new tag range.selectNode(new_text); sel.removeAllRanges(); sel.addRange(range); } else if (HTMLArea.is_ie) { range.findText("Type the " + type_string); range.select(); } } } } </script> <script type="text/javascript" src="https://www.iucr.org/__lib/js/general.js"></script> <script type="text/javascript" src="https://www.iucr.org/__fudge/var_serialise/var_serialise.js"></script> <script type="text/javascript" language="Javascript"> var wysiwyg_editing = true; // just so that onclick links don't execute in wysiwyg // Called when the user clicks on "Insert Citation" button HTMLArea.prototype._matrixInsertCite = function() { var editor = this; // for nested functions // OK, let's create the current args array that we'll pass to the dialog var currArgs = new Object(); currArgs["name"] = ""; var sel = this._getSelection(); var range = this._createRange(sel); var text_range = false; // OK, so they have a control object selected, let's try and make it a text selection if (sel.type && sel.type.toLowerCase() == "control") { var control_range = this._createRange(sel); var text_range = this._createTextRange(sel); if (text_range != null) { text_range = true; editor.selectNodeContents(control_range(0)); } else { alert(js_translate('object_requires_selection')); sel.empty(); return; } sel = this._getSelection(); range = this._createRange(sel); }// end if a control var inside_html = ''; var current_cite = this.getClosest("cite"); if (current_cite) { if (HTMLArea.is_ie) { inside_html = current_cite.innerHTML; } else { this.selectNodeContents(current_cite); inside_html = editor.getSelectedHTML(); } this.selectNodeContents(current_cite); } else { inside_html = editor.getSelectedHTML(); } sel = this._getSelection(); range = this._createRange(sel); // remove nested cite tags in selection var reg = new RegExp("<\/?cite ?[^>]*>", "gi"); inside_html = inside_html.replace(reg, ""); // if citation exists, remove it if (current_cite) { var text = this._doc.createDocumentFragment(); // the following also deletes the selection var div = this._doc.createElement("div"); div.innerHTML = inside_html; while (div.firstChild) { text.appendChild(div.firstChild); } current_cite.parentNode.replaceChild(text, current_cite); // else insert the citation } else { if (inside_html != '') { this.insertHTML('<cite>' + inside_html + '</cite>'); } } }; // Called when the user clicks on "Insert Definition" button HTMLArea.prototype._matrixInsertDfn = function() { var editor = this; // for nested functions // OK, let's create the current args array that we'll pass to the dialog var currArgs = new Object(); currArgs["title"] = ""; var sel = this._getSelection(); var range = this._createRange(sel); var text_range = false; // OK, so they have a control object selected, let's try and make it a text selection if (sel.type && sel.type.toLowerCase() == "control") { var control_range = this._createRange(sel); var text_range = this._createTextRange(sel); if (text_range != null) { text_range = true; editor.selectNodeContents(control_range(0)); } else { alert(js_translate('object_requires_selection')); sel.empty(); return; } sel = this._getSelection(); range = this._createRange(sel); }// end if a control var inside_html = ''; var current_dfn = this.getClosest("dfn"); if (current_dfn) { if (HTMLArea.is_ie) { inside_html = current_dfn.innerHTML; } else { this.selectNodeContents(current_dfn); inside_html = editor.getSelectedHTML(); } this.selectNodeContents(current_dfn); } else { inside_html = editor.getSelectedHTML(); } sel = this._getSelection(); range = this._createRange(sel); // Is this aready an definition? if (current_dfn) { var e = '^(\<dfn [^\>]+>)(.*)</dfn>$'; var re = new RegExp(e, "i"); var tag_html = editor.getSelectedHTML().replace(re, "$1"); var re = new RegExp("\n", "gi"); var tag_html = tag_html.replace(re, ""); currArgs["title"] = current_dfn.title; re = new RegExp('if \\(!window\\.wysiwyg_editing\\)[\\s]+\\{[\\s]+window\\.open\\([\'"]([^\'"]+)[\'"], [\'"][0-9]+[\'"], [\'"]([^\'"]+)[\'"]\\);', "gi"); results = re.exec(tag_html); if (results != null) { currArgs["title"] = results[1]; }// end if // else not a link so check for paragraphs } else { // convert all para tags to lowercase var para_html = inside_html.replace(/(<\/?)P/gi, "$1p"); // OK so we have some paragraph tags caught up in the mix, let's see what we can do with them // because we don't want our href's going around paragraph tags if (para_html.indexOf("<p") > -1) { // if the position of the first tag is the same as the last then we have only one paragraph // we don't want more than one paragraph because these can start or end from half-way through // a para, which would mess up the formatting when we go to re-insert the text with the href if (para_html.indexOf("<p") != para_html.lastIndexOf("<p")) { alert(js_translate('select_one_paragraph_at_a_time')); return; } }// end if paragraphs exist }// end if existing link var in_popup = '0'; if (this._inPopup == true) { in_popup = '1'; } editor_calendar_event_single_0_1442._object = this; var strPage = "misc_accessibility/insert_dfn.php?&title=" + escape(currArgs["title"]) + "&dfn=" + escape(inside_html) +"&editor_name=" + escape("calendar_event_single_0_1442") + "&in_popup=" + escape(in_popup); this._popupDialog("matrixInsertDfn", strPage, 420, 270, true, function(param) { if (!param) { // user must have pressed Cancel return false; } if (param["title"] != "") { if (param["dfn"] != inside_html) { inside_html = param["dfn"]; } var html = '<dfn title="' + param["title"] + '">' + inside_html + '</dfn>'; // replace with new URL editor.insertHTML(html, range); }// end if param exists }, null); }; </script> <script type="text/javascript" language="Javascript"> // Called when the user clicks on "Insert Blockquote" button HTMLArea.prototype._insertBlockquote = function() { var editor = this; // for nested functions var selection = this.getSelectedHTML(); var parent = this.getParentElement(); // Is the selected text is inside blockquote? var inside_blockquote = false; var ancestors = this.getAllAncestors(); for (var i = ancestors.length; --i >= 0;) { var el = ancestors[i]; // If the selected text is wrapped by "blockquote", toggle it off if (el && el.tagName == "BLOCKQUOTE") { var pattern = new RegExp("<blockquote>\r?\n?"+el.innerHTML+"\r?\n?<\/blockquote>", "i"); el.parentNode.innerHTML = el.parentNode.innerHTML.replace(pattern, el.innerHTML); inside_blockquote = true; break; } } // Remove all the "blockquotes" in select area var pattern = /(<blockquote>\r?\n?.*?\r?\n?<\/blockquote>)|(\r?\n?<blockquote \/>)/i; if (pattern.test(selection)) { inside_blockquote = true; var nodeContent; for (var i = parent.childNodes.length; --i >= 0;) { if (parent.childNodes[i].tagName == "BLOCKQUOTE") { nodeContent = parent.childNodes[i].innerHTML; pattern = new RegExp("<blockquote>\r?\n?"+nodeContent+"\r?\n?<\/blockquote>", "i"); parent.childNodes[i].parentNode.innerHTML = parent.childNodes[i].parentNode.innerHTML.replace(pattern, nodeContent); }//end if }//end for }//end if hasBlockquotes if (!inside_blockquote) { if (parent.tagName == "P") { var parent_html = parent.innerHTML; parent_html = parent_html.replace(/^\s*/, "").replace(/\s*$/, "");//trim whitespace // Remove surrounding paragraph tag from selected HTML for comparison if (HTMLArea.is_ie) { // Remove newlines from paragraph HTML so we can perform a meaningful comparison e = '\r\n'; re = new RegExp(e, "i"); selection = selection.replace(re, ""); // Remove paragraph start and end var e = '^<p[^>]*>'; var re = new RegExp(e, "i"); selection = selection.replace(re, ""); e = '</p>$'; re = new RegExp(e, "i"); selection = selection.replace(re, ""); } selection = selection.replace(/^\s*/, "").replace(/\s*$/, "");//trim whitespace if (parent_html == selection) { // the whole paragraph is selected, now wrap it with // blockquote tags var blockquote = this._doc.createElement("blockquote"); var paragraph = this._doc.createElement("p"); paragraph.innerHTML = selection; blockquote.appendChild(paragraph); var parent_parent = parent.parentNode; parent_parent.insertBefore(blockquote, parent); parent_parent.removeChild(parent); } else { alert("<BLOCKQUOTE> tags cannot be added to partial text within a paragraph."); } } else { // the selected text is not in p tag, just wrap it with blockquote this.surroundHTML('<blockquote>', '</blockquote>'); } } }; </script> <script type="text/javascript" src="https://www.iucr.org/__fudge/wysiwyg/plugins/visual_aid/visual-aid.js"></script> <script type="text/javascript" language="Javascript"> var visual_aid_image_path = "https://www.iucr.org/__fudge/wysiwyg/plugins/visual_aid/images"; var visual_aid_mode = false; HTMLArea.prototype._visualAidToggle = function(target, change_mode) { var editor = this; if (target.length == 1 && target[0] == "all") { var tag_types = visual_aid_types; } else { var tag_types = target; } // html elements with the start and end tags var elements = Array(); if (HTMLArea.is_gecko) { for (var i = 0; i < tag_types.length; i++) { elements[tag_types[i]] = this._doc.getElementsByTagName(tag_types[i]); } } else if (HTMLArea.is_ie) { for (var i = 0; i < tag_types.length; i++) { elements[tag_types[i]] = this._docContent.getElementsByTagName(tag_types[i]); } } for (var tag in elements) { if (elements[tag].length > 0) { for (var j = 0; j < elements[tag].length; j++) { //for (var j = elements[tag].length - 1; j >= 0; j--) { var obj = new visual_aid_factory(tag, elements[tag][j], editor); if (visual_aid_mode) { obj.turnOff(); } else { obj.turnOn(); } } } } if (change_mode) { visual_aid_mode = !visual_aid_mode; } } </script> <script type="text/javascript" language="Javascript"> // Called when the user clicks on "InsertImage" button HTMLArea.prototype._spellChecker = function() { var editor = this; // for nested functions // set focus in case we havnt selected anything if (HTMLArea.is_ie) { this._docContent.focus(); } else if (HTMLArea.ie_gecko) { this.focusEditor(); } // disable the toolbar this._tmp['disable_toolbar'] = true; this.updateToolbar(false); editor_calendar_event_single_0_1442._object = this; var popup_height = 410; // A bit more breathing room for Safari if (HTMLArea.is_safari) popup_height += 15; this._popupDialog("spellChecker", "spell_checker/spell_checker_popup.php?editor_name=calendar_event_single_0_1442", 605, popup_height, false, function(param) { if (!param) { // user must have pressed Cancel return false; } editor.setHTML(param["html"]); }, null); }; </script> <script type="text/javascript"> // txt is the name of the button, as in config.toolbar HTMLArea.prototype._buttonClicked = function(txt) { //stores original scrollbar position to circumvent //some IE craziness. var original_scroll = document.body.scrollTop; var editor = this; // needed in nested functions this.focusEditor(); //set scrollbar back document.body.scrollTop = original_scroll; var btn = this.config.btnList[txt]; if (!btn) { alert("FIXME: Unconfigured button!"); return false; } var cmd = btn[0]; if (typeof cmd == "function") { return cmd(this, txt); } if (/htmlarea-showmenu-/.test(cmd.toLowerCase())) { re = new RegExp("htmlarea-showmenu-"); var menuID = cmd.replace(re, ""); var menu = document.getElementById(menuID + "_menu"); if (menu.style.display == "none") { // hide all menus that are showing for (var x in this._toolbarMenus) { this._toolbarMenus[x].style.display = "none"; } menu.style.display = "block"; var buttonID = editor._uniqueID + "_" + menuID + "_span"; buttonID = buttonID.toLowerCase(); var button = document.getElementById(buttonID); if (HTMLArea.is_ie) { menu.style.pixelTop = button.offsetTop + 23; menu.style.pixelLeft = button.offsetLeft; } else { menu.style.top = button.offsetTop + 23; menu.style.left = button.offsetLeft; } } else { menu.style.display = "none"; } } else { // hide all menus that are showing for (var x in this._toolbarMenus) { this._toolbarMenus[x].style.display = "none"; } switch (cmd.toLowerCase()) { case "replacetext": this._popupDialog("ReplaceText", "replace_text/replace_text.php", 440, 520, true, function(types){ if (types == null) return false; var reg = null; var rep = null; var selected_html = types[0]; if (types[0] && editor.getSelectedHTML().length != 0) { selected_html = true; var curHTML = editor.getSelectedHTML(); // Remove the line breaks in the html content (see bug #5704) if (HTMLArea.is_ie) { curHTML = curHTML.replace(/\r\n/g, ""); } } else if (!types[0]) { selected_html = false; var curHTML = editor.getHTML(); } else { alert("Selected text is not defined. Replace Text action aborted."); return false; } if (HTMLArea.is_ie) { // IE removes the qoutes from some speical attribute values. Hence we add quotes here to the // unquoted attribute values so that the "replacement text" feature here works expectedly. var tags = curHTML.match(/<(?!\/)[^>]+>/g); for(var i=0; i<tags.length; i++) { var tag = tags[i]; curHTML = curHTML.replace(tag, tag.replace(/(\s[^\s<>="'`]+\s*=\s*)([^\s<>"\'`]+)/g, '$1"$2"')); }//end for } var HTMLtags = "!--|a|abbr|above|acronym|address|applet|array|area|b|base|basefont|bdo|bgsound|big|blink|blockquote|body|box|br|blink|button|caption|center|cite|code|col|colgroup|comment|dd|del|dfn|dir|div|dl|dt|em|embed|fieldset|fig|font|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|hr|html|i|id|iframe|ilayer|img|input|ins|isindex|kbd|label|layer|legend|li|link|listing|map|marquee|menu|meta|multicol|nextid|nobr|noframes|nolayer|note|noscript|object|ol|option|keygen|optgroup|p|param|pre|q|quote|range|root|s|samp|script|select|small|sound|spacer|span|sqrt|strike|strong|style|sub|sup|table|tbody|td|text|textarea|tfoot|th|thead|title|tr|tt|u|ul|var|wbr|xmp"; var bullet = unescape("%B7"); var shy = unescape("%AD"); for (var i=1;i<types.length;i++) if (types[i]) { // Bug #3204 - Remove Word Document HTML Clipboard Tags, that get pasted through on Firefox 3 localreg = new RegExp("<link rel=\"[^\"]*\" href=\"file[^\"]*\">", "gi"); localrep = ""; curHTML = curHTML.replace(localreg, localrep); wordreg = new RegExp("<w\:[^>]*>(.*?)<\/w\:[^>]*>", "gi"); wordrep = ""; curHTML = curHTML.replace(wordreg, wordrep); switch (i) { case 1 : { reg = new RegExp("<\/?font ?[^>]*>", "gi"); rep = ""; break; } case 2 : { //#3827 -- using regexp literal reg = /(\s|&nbsp;){2,}/gi; rep = "$1"; break; } case 3 : { reg = new RegExp("<(?!(\/?(" + HTMLtags + ")[> ]))([^>]*)>", "gi"); rep = ""; break; } case 4 : { reg = new RegExp("<p[^>]*>("+bullet+"|&middot\;)(.*?)<\/p>", "gi"); rep = "<li>$2"; break; } case 5 : { reg = new RegExp("(&shy;?|"+shy+")", "gi"); rep = ""; break; } case 6 : { reg = new RegExp("( style='.*?'| style=\".*?\")", "gi"); rep = ""; break; } case 7 : { reg = new RegExp(" class=\"?[^\">]*[\"]?", "gi"); rep = ""; break; } case 8 : { reg = new RegExp("<(table|/table|tr|tbody|/tbody|td|th) ?[^>]*>", "gi"); rep = ""; curHTML = curHTML.replace(reg, rep); reg = new RegExp("<(/tr|/td|/th)>", "gi"); rep = "<br />"; break; } case 9 : { reg = new RegExp("<\/?span( [^>]*>|>)", "gi"); rep = ""; break; } case 10 : { reg = new RegExp("<([A-Z][A-Z0-9]*)( [^>]*)?>(&nbsp;| |\n|\t)*<\/\\1>", "gi"); rep = ""; break; } case 11 : { reg = new RegExp('<([^/ >]+)[^>]*?([^>]*?( (src|href)="?[^>"]*"?)[^>]*?)*[^>]*?>', "gi"); rep = "<$1$3>"; break; } default : return false; } // BUG#928 - special condition to allow empty anchor tag if (i == 10) { reg2 = new RegExp("(<A NAME[^>]*?>)(&nbsp;| |\n|\t)*(</A>)", "gi"); rep2 = "$1matrix_anchor_tmp$3" curHTML = curHTML.replace(reg2, rep2); reg2 = new RegExp("(<A ID[^>]*?>)(&nbsp;| |\n|\t)*(</A>)", "gi"); rep2 = "$1matrix_anchor_tmp$3" curHTML = curHTML.replace(reg2, rep2); } curHTML = curHTML.replace(reg, rep); if (i == 10) { reg3 = new RegExp("(<A NAME[^>]*?>)matrix_anchor_tmp(</A>)", "gi"); rep3 = "$1$2" curHTML = curHTML.replace(reg3, rep3); reg3 = new RegExp("(<A ID[^>]*?>)matrix_anchor_tmp(</A>)", "gi"); rep3 = "$1$2" curHTML = curHTML.replace(reg3, rep3); } } if (selected_html) { if (types.length>0) { editor.insertHTML(curHTML); } } else { if (types.length>0) editor.setHTML(curHTML); } }, null); break; case "searchandreplace": // Global var to store the start search position in WYSIWYG var start_pos = 0; // Global var to keep track of textnodes in the body var current_node = 0; // Global var to check if the search text exists after complete document search var search_text_not_found = false; this._popupDialog("SearchAndReplace", "search_and_replace/search_and_replace.php", 380, 300, false, function(types){ if (types == null) return false; var action_type = types[0]; var search_str = types[1]; var replace_str = types[2]; var match_case = false; if (types[3]) { match_case = true; } var match_option = 'none'; if (types[4]) { match_option = 'whole'; } else if (types[5]) { match_option = 'start'; } else if (types[6]) { match_option = 'end'; } else if (types[7]) { match_option = 'regex'; } selected_content = editor.getSelectedHTML(); whole_content = editor.getHTML(); //Replace direction, "forward" by default var direction = true; switch (action_type) { case "search_next": break; case "search_previous": direction = false; break; case "replace_current": if (start_pos != -1 && selected_content.length > 0) { editor.insertHTML(replace_str); editor._refreshStoredTextNodes(); } break; case "replace_all": case "replace_selection": if (selected_content.length > 0 || action_type === "replace_all") { var match_count = 0; if (match_option != 'regex') { var text_nodes = editor._getTextNodes(true); var node_count = 0 var index = 0; var node_value; // If selection is made then only include the textnodes inside the selection if (action_type === "replace_selection") { if (selected_content.length > 0) { var sel = editor._getSelection(); var selected_nodes = Array(); var start_selection = false; alert(sel.anchorNode.nodeValue); for(var count=0; count < text_nodes.length; count++) { if (!start_selection && sel.anchorNode == text_nodes[count]) start_selection = true; selected_nodes[count] = start_selection ? text_nodes[count] : null; if (sel.focusNode == text_nodes[count]) break; } text_nodes = selected_nodes; // Start and end offset of anchor and focus node respectively index = sel.anchorOffset; var endOffset = sel.focusOffset; } else { text_nodes = Array(); } }//end if replace_selection while(node_count < text_nodes.length) { if (text_nodes[node_count] === null) { node_count++; continue; } index = editor._selectTextContent(node_count, search_str, index, match_case, match_option, true, true); // If text was selected, make sure we dont get across the unselected portion of the focus node if (endOffset !== undefined && index+search_str.length > endOffset && node_count == text_nodes.length - 1) break; if (index > -1) { node_value = text_nodes[node_count].nodeValue; node_value = (index > 0 ? node_value.substring(0, index) : '') + replace_str + node_value.substring(index+search_str.length, node_value.length); // Update the node value with the replacement text_nodes[node_count].nodeValue = node_value index += replace_str.length; match_count++; } else { // No more match in this node, move to the next node_count++; index = 0; } } alert(match_count+" occurrences of the given text have been replaced"); } else { var wysiwyg_content = (action_type === "replace_all") ? whole_content : selected_content; search_regex = new RegExp(search_str, match_case ? 'g' : 'gi'); match_count = editor._countWord(wysiwyg_content, search_regex); wysiwyg_content = wysiwyg_content.replace(search_regex, replace_str); if (action_type === "replace_all") { editor.setHTML(wysiwyg_content); } else { editor.insertHTML(wygiwyg_content); } alert(match_count+" number of matching occurrences for given regular expression have been replaced"); } if (match_count > 0) { editor._refreshStoredTextNodes(); } return false; } break; }//end switch // Select and highlight the selected text in the document body var node; var last_node_index = editor._getLastTextNodeIndex(); while(current_node >= -1 && current_node <= (last_node_index + 1)) { node = editor._getTextNode(current_node); // Node is null, we have reach at either end of node list, if (!node) { if (search_text_not_found) { alert("The given text was not found"); search_text_not_found = false; break; } if (direction) { alert("Reached the end of the WYSIWYG content. Starting from the beginning"); start_pos = 0; current_node = 0; } else { alert("Reached the start of the WYSIWYG content. Starting from the end"); last_node = editor._getTextNode(last_node_index); start_pos = last_node.nodeValue.length + search_str.length; current_node = last_node_index; } // if this flag is still true by the next time we reach the either end of document // then it will mean that search text is not there in the document body search_text_not_found = true; } node = !node ? editor._getTextNode(current_node) : node; if (node) { // If the backward search in previous node (actaully in node at right side) failed, // then we need to start the search from the end of the next node if (!direction && start_pos < 0) { start_pos = node.nodeValue.length + search_str.length; } // Search and highlight the text in the current text node start_pos = editor._selectTextContent(current_node, search_str, start_pos, match_case, match_option, direction); } // Continue searchin to next textnode if (start_pos < 0) { direction ? current_node++ : current_node--; continue; } else { // Search text was found hence, ... search_text_not_found = false; } break; }//end while }, null); break; case "outdent": this._changeIndent("left"); break; case "indent": this._changeIndent("right"); break; case "inserttable": this._insertTable(); if (this.config._showborders){ if (HTMLArea.is_ie) { var doco = this._docContent; } else { var doco = this._iframe.contentWindow; } this.config._showborders = true; } break; case "tableproperties": this._editTableProperties(); break; case "forecolor": case "backcolor": this._popupDialog("selectColor", "select_color/select_color.html", 248, 190, true, function(color) { if (color) { // Let the browser do the job editor._doc.execCommand(cmd, false, color); } }, HTMLArea._colorToRgb(this._doc.queryCommandValue(btn[0]))); break; case "matrixcreatelink": this._matrixInsertLink(); break; case "unlink": this._matrixUnLink(); break; case "matrixcreateanchor": this._matrixInsertAnchor(); break; case "matrixinsertimage": this._matrixinsertImage(); return; break; case "matrixembedmovie": this._matrixEmbedMovie(); return; break; case "matrixembedyoutube": this._matrixEmbedYouTube(); return; break; case "matrixabbr": this._matrixInsertAbbr(); break; case "matrixacronym": this._matrixInsertAcronym(); break; case "insertspecialchar": this._insertSpecialChar(); break; case "matrix_dt": var sel = this._getSelection(); var range = this._createRange(sel); var range_comp = ""; if (HTMLArea.is_gecko) { range_comp = range; } else if (HTMLArea.is_ie) { range_comp = range.text; } if (range_comp == "" || range_comp == "Type the term" || range_comp == "Type the definition") { this._definitionList("DT"); } else { this._definitionListWithSelection("DT"); } break; case "matrix_dd": var sel = this._getSelection(); var range = this._createRange(sel); var range_comp = ""; if (HTMLArea.is_gecko) { range_comp = range; } else if (HTMLArea.is_ie) { range_comp = range.text; } if (range_comp == "" || range_comp == "Type the term" || range_comp == "Type the definition") { this._definitionList("DD"); } else { this._definitionListWithSelection("DD"); } break; case "misccite": this._matrixInsertCite(); break; case "miscdfn": this._matrixInsertDfn(); break; case "quotation": this._insertBlockquote(); break; case "visual_aid": var target = new Array("all"); this._visualAidToggle(target, true); break; case "spellchecker": this._spellChecker(); return; break; case "htmlmode": this.setMode(this._editMode != "textmode" ? "textmode" : "wysiwyg"); break; default: this._execCommand(btn[0], false, ""); break; } } this.updateToolbar(); //set scrollbar back document.body.scrollTop = original_scroll; return false; }; // el is reference to the SELECT object // txt is the name of the select field, as in config.toolbar HTMLArea.prototype._comboSelected = function(el, txt) { this.focusEditor(); var value = el.options[el.selectedIndex].value; switch (txt) { case "fontname": case "fontsize": this._execCommand(txt, false, value); break; case "formatblock": if (HTMLArea.is_ie || HTMLArea.is_post_ie11) { // sad but true value = "<" + value + ">"; } this._execCommand(txt, false, value); break; case "applystyle": if (value == '') { break; } range = this._createRange(this._getSelection()); if (HTMLArea.is_ie) { ///////// INTERNET EXPLORER ///////// // if the selection is empty if (range.boundingWidth == 0) { break; } // get the parent element of the range, working around an IE bug // with parentELement() var parent = range.parentElement(); while (true) { var testRange = range.duplicate(); testRange.moveToElementText(parent); if (testRange.inRange(range)) { break; } if ((parent.nodeType != 1) || (parent.tagName.toLowerCase() == 'body')) { break; } parent = parent.parentElement; } var selectedHTML = range.htmlText.replace(/^\s+|\s+$/, ''); if (selectedHTML == range.text.replace(/^\s+|\s+$/, '')) { // we are within a single element range.text = 'MYOPENSPAN'+range.text+'MYCLOSESPAN'; } else if ((parent.innerHTML == selectedHTML) || (parent.outerHTML.replace(/\s/g, '') == selectedHTML.replace(/\s/g, ''))) { // Apply class to parent element directly parent.className = value; } else { // Traverse children of parent for (var elt = parent.firstChild; elt != null; elt = elt.nextSibling) { var tempRange = document.body.createTextRange(); tempRange.moveToElementText(elt); var overlaps = (range.compareEndPoints('StartToEnd', tempRange) <= 0) && (range.compareEndPoints('EndToStart', tempRange) >= 0); if (overlaps) { var endsAfter = (range.compareEndPoints('EndToEnd', tempRange) == -1); var startsBefore = (range.compareEndPoints('StartToStart', tempRange) == 1); if (startsBefore) { var offset = 0; while (range.compareEndPoints('StartToStart', tempRange) == 1) { offset++; tempRange.moveStart('character', 1); } tempRange.moveToElementText(elt); var newText = tempRange.text.substring(0, offset)+"MYOPENSPAN"+tempRange.text.substring(offset, tempRange.text.length)+"MYCLOSESPAN"; if (elt.nodeType == 3) { elt.data = newText; } else if ((elt.childNodes.length == 1) && (elt.firstChild.nodeType == 3)) { elt.innerHTML = newText; } else { tempRange.text = newText; // IE stuffs this up often so we avoid it } } else if (endsAfter) { // This element extends beyond the selection var offset = 0; while (range.compareEndPoints('EndToEnd', tempRange) == -1) { offset++; tempRange.moveEnd('character', -1); } tempRange.moveToElementText(elt); tempRange.text = "MYOPENSPAN"+tempRange.text.substring(0, tempRange.text.length-offset+1)+"MYCLOSESPAN"+tempRange.text.substring(tempRange.text.length-offset+1, tempRange.text.length); } else { // This element is fully within the selection // Apply class to it, or wrap a classed span around it if (elt.nodeType == 3) { // surround it with a span var newSpan = document.createElement('SPAN'); newSpan.innerHTML = elt.data; newSpan.className = value; elt.parentNode.insertBefore(newSpan, elt); elt.parentNode.removeChild(elt); } else { elt.className = value; } } } } } parent.innerHTML = (parent.innerHTML.replace(new RegExp("MYOPENSPAN", "g"), '<span class="'+value+'">').replace(new RegExp("MYCLOSESPAN", "g"), '</span>')); } else { ///////// NON IE ///////// if (range.collapsed) { break; } if ((range.startContainer.nodeType == 3) && (range.startContainer == range.endContainer)) { // Selection covers only a single text node if ((range.startOffset == 0) && (range.endOffset == range.endContainer.length)) { // all of one text node selected range.startContainer.parentNode.className = value; } else { // part of one text node selected this.surroundHTML('<span class="'+value+'">', '</span>'); } break; }//end if inside a single text node var effectiveStartElt = range.startContainer; if ((effectiveStartElt.nodeType == 3)) { effectiveStartElt = effectiveStartElt.parentNode; } var effectiveEndElt = range.endContainer; if ((effectiveEndElt.nodeType == 3)) { effectiveEndElt = effectiveEndElt.parentNode; } if (range.startContainer == range.endContainer) { if ((range.startOffset != 0) || (range.endOffset != range.childNodes.length)) { effectiveStartElt = range.startContainer.childNodes.item(range.startOffset); effectiveEndElt = range.startContainer.childNodes.item(range.endOffset); } } var ancestor = range.commonAncestorContainer; if ((ancestor.tagName == 'UL') || (ancestor.tagName == 'OL') || (ancestor.tagName == 'TABLE') || (ancestor.tagName == 'DL') || (ancestor.tagName == 'TR')) { // Do some clearing up of empty text nodes to avoid confusion var elt = ancestor.firstChild; while (elt != null) { nextElt = elt.nextSibling; if ((elt.nodeType == 3) && (elt.data.replace(/^\s+|\s+$/, '') == '')) { elt.parentNode.removeChild(elt); } elt = nextElt; } } if ((effectiveStartElt == effectiveStartElt.parentNode.firstChild) && (effectiveEndElt == effectiveStartElt.parentNode.lastChild) && (range.startOffset == 0) && (range.endOffset == 0)) { // the selection equals all of the parent container, so just apply there effectiveStartElt.parentNode.className = value; break; }//end if all of parent container selected if (effectiveStartElt.parentNode == effectiveEndElt.parentNode) { // we can traverse // Do the start container if (range.startContainer.nodeType == 3) { if (range.startOffset == 0) { effectiveStartElt.className = value; } else { // split it var newSpan = document.createElement('SPAN'); newSpan.innerHTML = range.startContainer.data.substring(range.startOffset); newSpan.className = value; if (range.startContainer.nextSibling == null) { range.startContainer.parentNode.appendChild(newSpan); } else { range.startContainer.parentNode.insertBefore(newSpan, range.startContainer.nextSibling); } range.startContainer.data = range.startContainer.data.substring(0, range.startOffset); } } else { effectiveStartElt.className = value; } // Do the in-between containers var tempElt = effectiveStartElt.nextSibling; while ((tempElt != null) && (tempElt != effectiveEndElt)) { if (tempElt.nodeType == 3) { // surround it with a span var newSpan = document.createElement('SPAN'); newSpan.innerHTML = tempElt.data; newSpan.className = value; tempElt.parentNode.insertBefore(newSpan, tempElt); tempElt.parentNode.removeChild(tempElt); } else { tempElt.className = value; } tempElt = tempElt.nextSibling; } // Do the end container if (range.endContainer.nodeType == 3) { if (range.endOffset >= range.endContainer.data.length-1) { effectiveEndElt.className = value; } else { // split it var newSpan = document.createElement('SPAN'); newSpan.className = value; newSpan.innerHTML = range.endContainer.data.substring(0, range.endOffset); range.endContainer.parentNode.insertBefore(newSpan, range.endContainer); range.endContainer.data = range.endContainer.data.substring(range.endOffset); } } else { effectiveEndElt.className == value; } break; }//end if common parent alert('Styles cannot be applied to the current selection. Try applying styles to smaller subsections individually'); } break; case "formatblock": if (HTMLArea.is_ie || HTMLArea.is_post_ie11) { // sad but true value = "<" + value + ">"; } this._execCommand(txt, false, value); break; case "chooselang": if (value != null) { var current_span = this.getClosest("span"); if (current_span) { if (value == "") { ///////////////////// // Remove Lang Tag // ///////////////////// var sel = this._getSelection(); var range = this._createRange(sel); var span_parent = current_span.parentNode; for (var i = 0; i < span_parent.childNodes.length; i++) { var child_node = span_parent.childNodes[i]; if (child_node.tagName == "SPAN") { if (child_node.innerHTML == current_span.innerHTML) { if (HTMLArea.is_gecko) { // Gecko provides a cleaner way if (child_node.attributes.length == 1) { // span tag may have only one attribute, lang. then // we remove the surrounding span tag itself if (child_node.attributes[0].name == "lang") { range.selectNode(child_node); this.insertHTML(child_node.innerHTML, range); } } else if (child_node.attributes.length > 1) { // span tag may have multiple attributes, then // we only remove lang attribute from the tag var attrs = child_node.attributes; var lang_found = false; var xml_lang_found = false; var tmp_span = "<span "; for (var j = 0; j < attrs.length; j++) { if (attrs[j].name == "lang") { lang_found = true; } else if (attrs[j].name == "xml:lang") { xml_lang_found = true; }else { tmp_span = tmp_span + attrs[j].name + "=\"" + attrs[j].value +"\" "; } } if (lang_found && xml_lang_found && attrs.length == 2) { range.selectNode(child_node); this.insertHTML(child_node.innerHTML, range); } else if (lang_found || xml_lang_found) { tmp_span += ">"; range.selectNode(child_node); this.insertHTML(tmp_span + child_node.innerHTML + "</span>", range) } } } else if (HTMLArea.is_ie) { var inner_html = child_node.innerHTML var new_child = this._doc.createTextNode(''); if (typeof(visual_aid_mode) != 'undefined' && visual_aid_mode) { var e = '<span id=wysiwyg-visual-aid-plugin-lang[^>]*>[^>]*<\/span>'; var re = new RegExp(e, "ig"); inner_html = inner_html.replace(re, ''); } span_parent.replaceChild(new_child, child_node); range.pasteHTML(inner_html); } } } } } else { /////////////////////////////// // Choose The Lang Attribute // /////////////////////////////// this.selectNodeContents(current_span); current_span.lang = value; } } else if (value != "") { ///////////////////////////////////// // Add The Span Tag With Lang Attr // ///////////////////////////////////// if (this.getSelectedHTML().length != 0) { this.surroundHTML("<span lang=\"" + value + "\">", "</span>"); } } } break; default: alert(js_translate('combo_box_not_implemented', txt)); break; } }; // the execCommand function (intercepts some commands and replaces them with // our own implementation) HTMLArea.prototype._execCommand = function(cmdID, UI, param) { switch (cmdID.toLowerCase()) { case "bold": this._doc.execCommand(cmdID, UI, param); // Convert the added 'b' tags to 'strong' if (this._doc.queryCommandState("bold")) { this._convertTags('b', 'strong'); } break; case "italic": this._doc.execCommand(cmdID, UI, param); // Convert the added 'i' tags to 'em' if (this._doc.queryCommandState("italic")) { this._convertTags('i', 'em'); } break; case "underline": this._doc.execCommand(cmdID, UI, param); break; case "strikethrough": this._doc.execCommand(cmdID, UI, param); break; case "inserthorizontalrule": if (HTMLArea.is_gecko) { this._insertHorizontalRule(); } else if (HTMLArea.is_ie) { this._doc.execCommand('InsertHorizontalRule'); } break; case "justifyleft": case "justifyright": case "justifycenter": case "justifyfull": this._doc.execCommand(cmdID, UI, param); if (HTMLArea.is_ie) { this._operateTags("p"); this._operateTags("div"); this._operateTags("h1"); this._operateTags("h2"); this._operateTags("h3"); this._operateTags("h4"); this._operateTags("h5"); this._operateTags("h6"); } break; default: this._doc.execCommand(cmdID, UI, param); break; } this.focusEditor(); }; //bunch of tags to compare when examining nodes HTMLArea.prototype.inline_tags = ['a', 'abbr', 'acronym', 'b', 'bdo', 'big', 'cite', 'code', 'dfn', 'em', 'font', 'i', 'kbd', 'label', 'q', 's', 'samp', 'select', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'textarea', 'tt', 'u', 'var']; // Finds the first parent element of a given node whose display is probably not inline HTMLArea.prototype.parentBlock = function(node) { while ( node.parentNode && ( node.nodeType != 1 || this.inArray( node.tagName.toLowerCase(), this.inline_tags ) ) ) node = node.parentNode; return node; }; // Returns true if a given value is in an array, false otherwise HTMLArea.prototype.inArray = function(val, arr) { for (var i=0; i < arr.length; i++) if (val == arr[i]) return true; return false; }; // Sets dir attribute value HTMLArea.prototype.set_dir_attr = function(val) { this._dir_attr = val; }; // Internal function for recursively itterating over a all nodes in a fragment // If a callback function returns a non-null value, that is returned and the crawl is therefore broken HTMLArea.prototype.traverseChildrenNodes = function(me, callback) { if ( me.firstChild ) { var myChild = me.firstChild; var retVal; while (myChild) { if ( (retVal=callback(myChild)) != null ) return retVal; if ( (retVal=this.traverseChildrenNodes(myChild, callback)) != null ) return retVal; myChild = myChild.nextSibling; } } }; // Callback function to be performed on each node in the hierarchy // Sets flag to true if we find actual text or an element that's not usually displayed inline HTMLArea.prototype.containsText = function(node) { if (node.nodeType == 1 && HTMLArea.prototype.inArray(node.nodeName.toLowerCase(), HTMLArea.prototype.inline_tags) && node.hasChildNodes() && node.firstChild.nodeValue) return true; else if (node.nodeType == 3 && node.nodeValue != '') return true; else return null; }; // Inserts a node down into a node, on the left side of the tree under target HTMLArea.prototype.insertDeepLeft = function(target, toInsert) { var digger = target; while ( digger.firstChild && digger.firstChild.nodeType == 1 ) digger = digger.firstChild; var refNode = digger.firstChild ? digger.firstChild : null; //falling.insertBefore(toInsert, refNode); digger.innerHTML = toInsert; }; HTMLArea.prototype.isElem = function(node,type) { return node.nodeName.toLowerCase() == type.toLowerCase(); }; // A generic event handler for things that happen in the IFRAME's document. // This function also handles key bindings. HTMLArea.prototype._editorEvent = function(ev) { var editor = this; // Make enter without shift add <p> tags in Moz as well as IE if (ev.type == "keypress" && !HTMLArea.is_ie) { var keyCode = ev.keyCode; if (keyCode == 13 && !ev.shiftKey && this._iframe.contentWindow.getSelection) { // Get the selection and solid references to what we're dealing with chopping var sel = this._iframe.contentWindow.getSelection(); // Set the start and end points such that they're going /forward/ through the document var leftRange = this._doc.createRange(); var rightRange = this._doc.createRange(); // While getting anchorNode and focusNode, for some reason Firefox is getting parent node of the // selected node instead of selected node itself when non-text node is selected // See bug #3826 var sAnchorNode = sel.anchorNode; var sFocusNode = sel.focusNode; var sAnchorOffset = sel.anchorOffset; var sFocusOffset = sel.focusOffset; if (sAnchorNode.nodeName == 'BODY' && sAnchorNode.childNodes[sAnchorOffset]) { sAnchorNode = sAnchorNode.childNodes[sAnchorOffset]; sAnchorOffset = 0; while(sAnchorNode.childNodes[0] && sAnchorNode.nodeName != '#text') sAnchorNode = sAnchorNode.childNodes[0]; } if (sFocusNode.nodeName == 'BODY' && sFocusNode.childNodes[sFocusOffset]) { sFocusNode = sFocusNode.childNodes[sFocusOffset]; sFocusOffset = 0; while(sFocusNode.childNodes[0] && sFocusNode.nodeName != '#text') sFocusNode = sFocusNode.childNodes[0]; } if (sAnchorNode.nodeName != '#text') { empty_node = document.createTextNode(''); if (sAnchorNode.nodeName != 'BR') { sAnchorNode.appendChild(empty_node); } else { sAnchorNode.parentNode.insertBefore(empty_node, sAnchorNode.nextSibling); } sAnchorNode = empty_node; sAnchorOffset = 0; } if (sFocusNode.nodeName != '#text') { empty_node = document.createTextNode(''); if (sFocusNode.nodeName != 'BR') { sFocusNode.appendChild(empty_node); } else { sFocusNode.parentNode.insertBefore(empty_node, sFocusNode.nextSibling); } sFocusNode = empty_node; sFocusOffset = 0; } leftRange.setStart(sAnchorNode,sAnchorOffset); rightRange.setStart(sFocusNode,sFocusOffset); leftRange.collapse(true); rightRange.collapse(true); var direct = leftRange.compareBoundaryPoints(leftRange.START_TO_END,rightRange); var startNode = (direct<0) ? sAnchorNode : sFocusNode; var startOffset = (direct<0) ? sAnchorOffset : sFocusOffset; var endNode = (direct<0) ? sFocusNode : sAnchorNode; var endOffset = (direct<0) ? sFocusOffset : sAnchorOffset; // When Focus node and Anchor node are same point and foucs node is at end of an anchor node, add an extra blank node // This is to make sure that paragraphs are created outside the node. See bug #3978 if (startOffset == endOffset && startNode == endNode && endNode.nodeValue && endNode.nodeValue.length == endOffset && endNode.parentNode && this.isElem(endNode.parentNode,'a') && endNode.parentNode.parentNode) { blank_node = document.createTextNode(''); endNode.parentNode.parentNode.appendChild(blank_node); startNode = blank_node; startOffset = 0; endNode = blank_node; endOffset = 0; } // Find the parent blocks of nodes at either end, and get paragraph attributes var startBlock = this.parentBlock(startNode); var endBlock = this.parentBlock(endNode); var leftParagraphAttributes = new Array(); var rightParagraphAttributes = new Array(); // Inside a list Item, let the browser handle it. if ( this.isElem(startBlock,'li') || this.isElem(endBlock,'li') ) return; // if line starts with a header var isInsideHeader = this.isElem(startBlock, 'h1') || this.isElem(startBlock, 'h2') || this.isElem(startBlock, 'h3') || this.isElem(startBlock, 'h4') || this.isElem(startBlock, 'h5') || this.isElem(startBlock, 'h6'); var headerType = null; if (isInsideHeader) { if (this.isElem(startBlock, 'h1')) headerType = 'h1'; else if (this.isElem(startBlock, 'h2')) headerType = 'h2'; else if (this.isElem(startBlock, 'h3')) headerType = 'h3'; else if (this.isElem(startBlock, 'h4')) headerType = 'h4'; else if (this.isElem(startBlock, 'h5')) headerType = 'h5'; else if (this.isElem(startBlock, 'h6')) headerType = 'h6'; } if ( this.isElem(startBlock,'p') ) { for ( var i=0; i < startBlock.attributes.length; i++ ) { leftParagraphAttributes[ startBlock.attributes[i].nodeName ] = startBlock.attributes[i].nodeValue; } } if ( this.isElem(endBlock,'p') ) { for ( var i=0; i < endBlock.attributes.length; i++ ) { rightParagraphAttributes[ endBlock.attributes[i].nodeName ] = endBlock.attributes[i].nodeValue; } } var choppingStart = startNode; var choppingEnd = endNode; while ( ( choppingStart.previousSibling && !this.isElem(choppingStart.previousSibling,'p') ) || ( choppingStart.parentNode && choppingStart.parentNode != startBlock && choppingStart.parentNode.nodeType != 9 ) ) choppingStart = choppingStart.previousSibling ? choppingStart.previousSibling : choppingStart.parentNode; while ( ( choppingEnd.nextSibling && !this.isElem(choppingEnd.nextSibling,'p') ) || ( choppingEnd.parentNode && choppingEnd.parentNode != endBlock && choppingEnd.parentNode.nodeType != 9 ) ) choppingEnd = choppingEnd.nextSibling ? choppingEnd.nextSibling : choppingEnd.parentNode; // Set up new paragraphs var leftParagraph = null; var rightParagraph = null; // this element will be used if u r in a header var newParagraph = null; if (!isInsideHeader) { // if we are not inside a heading keep the original behaviour leftParagraph = this._doc.createElement('p'); rightParagraph = this._doc.createElement('p'); } else { if (headerType != null) { // create two paragraph with the header leftParagraph = this._doc.createElement(headerType); rightParagraph = this._doc.createElement(headerType); } else { // error headerType should not be null! } newParagraph = this._doc.createElement('p') } for ( var attrName in leftParagraphAttributes ) { var thisAttr = this._doc.createAttribute(attrName); thisAttr.value = leftParagraphAttributes[attrName]; leftParagraph.setAttributeNode(thisAttr); } for ( var attrName in rightParagraphAttributes ) { var thisAttr = this._doc.createAttribute(attrName); thisAttr.value = rightParagraphAttributes[attrName]; rightParagraph.setAttributeNode(thisAttr); } // Split the data into left and right paragraphs //For Left paragraph leftRange.setStartBefore(choppingStart); leftRange.setEnd(startNode,startOffset); leftParagraph.appendChild(leftRange.cloneContents()); //For Right Paragraph rightRange.setEndAfter(choppingEnd); rightRange.setStart(endNode,endOffset); rightParagraph.appendChild(rightRange.cloneContents()); // containsData is true if there is data in the paragraph, //if false, insert a non-breaking space var isLeftParagraphEmpty = false; var containsData = false; containsData = this.traverseChildrenNodes(leftParagraph, this.containsText); if ( containsData != true ) { this.insertDeepLeft(leftParagraph, '&nbsp;'); isLeftParagraphEmpty = true; } // containsData is true if there is data in the paragraph, //if false, insert a non-breaking space var isRightParagraphEmpty = false; containsData = false; containsData = this.traverseChildrenNodes(rightParagraph, this.containsText); if ( containsData != true ) { this.insertDeepLeft(rightParagraph, '&nbsp;'); isRightParagraphEmpty = true; } // Get the range of everything to be replaced var fullRange = this._doc.createRange(); if (!isInsideHeader) { //if no previous sibling, and parent is a paragraph, set start of range before parent, so it will be removed. //otherwise set to original start range if ( !choppingStart.previousSibling && this.isElem(choppingStart.parentNode,'p') ) { fullRange.setStartBefore(choppingStart.parentNode); } else { fullRange.setStart(leftRange.startContainer, leftRange.startOffset); } if ( !choppingEnd.nextSibling && this.isElem(choppingEnd.parentNode,'p') ) { fullRange.setEndAfter(choppingEnd.parentNode); } else { fullRange.setEnd(rightRange.endContainer, rightRange.endOffset); } } else { // if we are inside a header we will chop the whole line // and replace it with 3 new lines. // - first line will from starting to the cursor position of the old line // - second line will an empty p tag // - third line will be from the cursor position to the ending of the old line fullRange.setStartBefore(choppingStart.parentNode); fullRange.setEndAfter(choppingEnd.parentNode); } //remove data from range and insert new paragraphs fullRange.deleteContents(); if (isInsideHeader) { // add the rightParagraph if (!isRightParagraphEmpty) fullRange.insertNode(rightParagraph); // add a space in the new paragraph newParagraph.appendChild(document.createTextNode(""+'\u00A0')); fullRange.insertNode(newParagraph); // add the rightParagraph if (!isLeftParagraphEmpty) fullRange.insertNode(leftParagraph); // set the selection to the start of the new paragraph (new) var cursorRange = this._doc.createRange(); cursorRange.setStart(newParagraph,0); cursorRange.collapse(true); sel = this._iframe.contentWindow.getSelection(); sel.removeAllRanges(); sel.addRange(cursorRange); } else { // we keep the old behaviour fullRange.insertNode(rightParagraph); fullRange.insertNode(leftParagraph); if ( rightParagraph.firstChild ) { while ( this.inArray(rightParagraph.firstChild && rightParagraph.firstChild.nodeName.toLowerCase(), this.inline_tags) ) rightParagraph = rightParagraph.firstChild; if ( rightParagraph.firstChild && rightParagraph.firstChild.nodeType == 3 ) rightParagraph = rightParagraph.firstChild; // and text, if they've got it // Set the selection to the start of the new paragraph (right) var cursorRange = this._doc.createRange(); cursorRange.setStart(rightParagraph,0); cursorRange.collapse(true); sel = this._iframe.contentWindow.getSelection(); sel.removeAllRanges(); sel.addRange(cursorRange); } } // Stop event to prevent no IE browsers adding the <br> HTMLArea._stopEvent(ev); } } if ((ev.type == "keypress")) { var key = (HTMLArea.is_ie ? ev.keyCode : ev.charCode); if ((key == 32) || (key == 13) || (key == 9) || (key == 0)) { expandKeywords(editor); } } else if (ev.type == "keydown") { var key = (HTMLArea.is_ie ? ev.keyCode : ev.charCode); if ((key == 0)) { expandKeywords(editor); } } var keyEvent = (HTMLArea.is_ie && ev.type == "keydown") || (ev.type == "keypress"); if (keyEvent && ev.ctrlKey) { var key = String.fromCharCode(HTMLArea.is_ie ? ev.keyCode : ev.charCode).toLowerCase(); var sel = null; var range = null; var cmd = null; var value = null; switch (key) { case 'b': // KEY bold (!HTMLArea.is_ie) && (cmd = "bold"); break; case 'i': // KEY italic (!HTMLArea.is_ie) && (cmd = "italic"); break; case 'u': // KEY underline (!HTMLArea.is_ie) && (cmd = "underline"); break; case 's': // KEY strikethrough cmd = "strikethrough"; break; // headings case '1': // KEY heading 1 case '2': // KEY heading 2 case '3': // KEY heading 3 case '4': // KEY heading 4 case '5': // KEY heading 5 case '6': // KEY heading 6 cmd = "formatblock"; value = "h" + key; if (HTMLArea.is_ie) { value = "<" + value + ">"; } break; case 'a': if (!HTMLArea.is_ie) { // KEY select all sel = this._getSelection(); sel.removeAllRanges(); range = this._createRange(); range.selectNodeContents(this._doc.body); sel.addRange(range); HTMLArea._stopEvent(ev); } break; case 'l': // KEY justify left cmd = "justifyleft"; break; case 'e': // KEY justify center cmd = "justifycenter"; break; case 'r': // KEY justify right cmd = "justifyright"; break; case 'j': // KEY justify full cmd = "justifyfull"; break; case 'k': this._matrixInsertLink(); HTMLArea._stopEvent(ev); break; case 'd': this._handleDefinitionShortcut(); HTMLArea._stopEvent(ev); break; case 'm': // Toggle Visual Aid var target = new Array("all"); this._visualAidToggle(target, true); HTMLArea._stopEvent(ev); break; } if (cmd) { // execute simple command this._execCommand(cmd, false, value); HTMLArea._stopEvent(ev); } } // update the toolbar state after some time // if we are not just generally typing if (!keyEvent || (keyEvent && ev.ctrlKey)) { // hide all menus that are showing for (var x in this._toolbarMenus) { this._toolbarMenus[x].style.display = "none"; } setTimeout(function() { editor.updateToolbar(); }, 50); } }; // retrieve the HTML HTMLArea.prototype.getHTML = function() { var retVal = ''; if (visual_aid_mode) { var target = new Array("all"); this._visualAidToggle(target, true); } switch (this._editMode) { case "textmode": if (HTMLArea.is_gecko) { var html = this._iframe.contentWindow.document.body.ownerDocument.createRange(); html.selectNodeContents(this._iframe.contentWindow.document.body); retVal = html.toString(); } else if (HTMLArea.is_ie) { retVal = this._docContent.innerText; } break; case "wysiwyg": if (HTMLArea.is_gecko) { retVal = this._iframe.contentWindow.document.body.innerHTML; // if we are using firefox and if it is the initial container // we need to remove any new line character because // firefox will keep on adding <br> and additional \n(\n) // do make sure our body (div) is visible // see bug #5148 br tag created in the WYSIWYG as soon as it's created if (HTMLArea.is_ff && retVal.match(/^<br>(\n)*$/) != null) { retVal = retVal.replace(/^<br>(\n)*$/, ''); } } else if (HTMLArea.is_ie) { retVal = this._docContent.innerHTML; } var entities_array = { 173 : '&shy;' //soft hyphen }; retVal = this.replace_entities(retVal, entities_array); break; default: alert(js_translate('undefined_mode', '<' + this._editMode + '>')); return false; } // let any plugins modify the returned HTML if they want to retVal = retVal.replace(/class=""/gi, ''); if (this._editMode == "textmode") { // retVal = this.make_absolute_urls(retVal); } else { retVal = this.make_relative_hrefs(retVal); } return retVal; }; //////////////////////////////////////////////////////////////////////// // because the editor automatically prepend the http:// business to // all relative urls, remove them from the html HTMLArea.prototype.make_relative_hrefs = function(html_code) { var html = new String(html_code); var e = ''; var re = null; var limbo = '0'; // remove any references to this pop-up's url var current_location = document.location.toString(); // escape any special reg exp chars in the location current_location = current_location.replace(/([.?+*^$\\\[\]\(\)\{\}|])/gi, '\\$1'); re = new RegExp(current_location + '[/]?', "gi"); html = html.replace(re, ""); // now replace any ampersands with '&amp;' as IE seems to anyway sometimes (even in href's) current_location = current_location.replace(/\&/gi, "&amp;"); re = new RegExp(current_location, "gi"); html = html.replace(re, ""); // any other links e = 'http[s]?://www.iucr.org/calendar/etc/add-meeting'; re = new RegExp(e, "gi"); html = html.replace(re, "./"); if (HTMLArea.is_ie_compatibility && limbo == '1') { e = '_edit'; url = 'www.iucr.org/calendar/etc/add-meeting'; re = new RegExp(e, "gi"); url = url.replace(re, ""); re = new RegExp('http[s]?://' + url, "gi"); html = html.replace(re, "./"); } return html; }; // We want to replace actual entities in the html(like �) with // Their correct &bla; representations HTMLArea.prototype.replace_entities = function(html_code, entities_array) { if (entities_array == undefined){ var entities_array = { 160 : '&nbsp;', // non-breaking space 161 : '&iexcl;', // inverted exclamation mark 162 : '&cent;', // cent sign 163 : '&pound;', // pound sterling sign 164 : '&curren;', // general currency sign 165 : '&yen;', // yen sign 166 : '&brvbar;', // broken vertical bar 167 : '&sect;', // section sign 168 : '&uml;', // spacing dieresis or umlaut 169 : '&copy;', // copyright sign 170 : '&ordf;', // feminine ordinal indicator 171 : '&laquo;', // left (double) angle quote (guillemet) 172 : '&not;', // logical not sign 173 : '&shy;', // soft hyphen 174 : '&reg;', // registered trademark sign 175 : '&macr;', // spacing macron (long) accent 176 : '&deg;', // degree sign 177 : '&plusmn;', // plus-or-minus sign 178 : '&sup2;', // superscript 2 179 : '&sup3;', // superscript 3 180 : '&acute;', // spacing acute accent 181 : '&micro;', // micro sign 182 : '&para;', // paragraph sigh, pilcrown sign 183 : '&middot;', // middle dot, centred dot 184 : '&cedil;', // spacing cedilla 185 : '&sup1;', // superscript 1 186 : '&ordm;', // masculine ordinal indicator 187 : '&raquo;', // right (double) angle quote (guillemet) 188 : '&frac14;', // fraction 1/4 189 : '&frac12;', // fraction 1/2 190 : '&frac34;', // fraction 3/4 191 : '&iquest;', // inverted question mark 192 : '&Agrave;', // capital A grave 193 : '&Aacute;', // capital A acute 194 : '&Acirc;', // capital A circumflex 195 : '&Atilde;', // capital A tilde 196 : '&Auml;', // capital A dieresis or umlaut 197 : '&Aring;', // capital A ring 198 : '&AElig;', // capital AE ligature 199 : '&Ccedil;', // capital C cedilla 200 : '&Egrave;', // capital E grave 201 : '&Eacute;', // capital E acute 202 : '&Ecirc;', // capital E circumflex 203 : '&Euml;', // capital E dieresis or umlaut 204 : '&Igrave;', // capital I grave 205 : '&Iacute;', // capital I acute 206 : '&Icirc;', // capital I circumflex 207 : '&Iuml;', // capital I dieresis or umlaut 208 : '&ETH;', // capital ETH 209 : '&Ntilde;', // capital N tilde 210 : '&Ograve;', // capital O grave 211 : '&Oacute;', // capital O acute 212 : '&Ocirc;', // capital O circumflex 213 : '&Otilde;', // capital O tilde 214 : '&Ouml;', // capital O dieresis or umlaut 215 : '&times;', // multiplication sign 216 : '&Oslash;', // capital O slash 217 : '&Ugrave;', // capital U grave 218 : '&Uacute;', // capital U acute 219 : '&Ucirc;', // capital U circumflex 220 : '&Uuml;', // capital U dieresis or umlaut 221 : '&Yacute;', // capital Y acute 222 : '&THORN;', // capital THORN 223 : '&szlig;', // small sharp s, sz ligature 224 : '&agrave;', // small a grave 225 : '&aacute;', // small a acute 226 : '&acirc;', // small a circumflex 227 : '&atilde;', // small a tilde 228 : '&auml;', // small a dieresis or umlaut 229 : '&aring;', // small a ring 230 : '&aelig;', // small ae ligature 231 : '&ccedil;', // small c cedilla 232 : '&egrave;', // small e grave 233 : '&eacute;', // small e acute 234 : '&ecirc;', // small e circumflex 235 : '&euml;', // small e dieresis or umlaut 236 : '&igrave;', // small i grave 237 : '&iacute;', // small i acute 238 : '&icirc;', // small i circumflex 239 : '&iuml;', // small i dieresis or umlaut 240 : '&eth;', // small eth 241 : '&ntilde;', // small n tilde 242 : '&ograve;', // small o grave 243 : '&oacute;', // small o acute 244 : '&ocirc;', // small o circumflex 245 : '&otilde;', // small o tilde 246 : '&ouml;', // small o dieresis or umlaut 247 : '&divide;', // division sign 248 : '&oslash;', // small o slash 249 : '&ugrave;', // small u grave 250 : '&uacute;', // small u acute 251 : '&ucirc;', // small u circumflex 252 : '&uuml;', // small u dieresis or umlaut 253 : '&yacute;', // small y acute 254 : '&thorn;', // small thorn 255 : '&yuml;', // small y dieresis or umlaut 256 : '&#256;', // uppercase roman A with macron 257 : '&#257;', // lowercase roman a with macron 274 : '&#274;', // uppercase roman E with macron 275 : '&#275;', // lowercase roman e with macron 298 : '&#298;', // uppercase roman I with macron 299 : '&#299;', // lowercase roman i with macron 332 : '&#332;', // uppercase roman O with macron 333 : '&#333;', // lowercase roman o with macron 362 : '&#362;', // uppercase roman U with macron 363 : '&#363;', // lowercase roman u with macron 338 : '&OElig;', // capital ligature OE 339 : '&oelig;', // small ligature oe 352 : '&Scaron;', // capital S with caron 353 : '&scaron;', // small s with caron 376 : '&Yuml;', // capital Y with diaeres 402 : '&fnof;', // small italic f, function of, florin 710 : '&circ;', // modifier letter circumflex accent 732 : '&tilde;', // small tilde 913 : '&Alpha;', // capital Alhpa 914 : '&Beta;', // capital Beta 915 : '&Gamma;', // capital Gamma 916 : '&Delta;', // capital Delta 917 : '&Epsilon;', // capital Epsilon 918 : '&Zeta;', // capital Zeta 919 : '&Eta;', // capital Eta 920 : '&Theta;', // capital Theta 921 : '&Iota;', // capital Iota 922 : '&Kappa;', // capital Kappa 923 : '&Lambda;', // capital Lambda 924 : '&Mu;', // capital Mu 925 : '&Nu;', // capital Nu 926 : '&Xi;', // capital Xi 927 : '&Omicron;', // capital Omicron 928 : '&Pi;', // capital Pi 929 : '&Rho;', // capital Rho 931 : '&Sigma;', // capital Sigma 932 : '&Tau;', // capital Tau 933 : '&Upsilon;', // capital Upsilon 934 : '&Phi;', // capital Phi 935 : '&Chi;', // capital Chi 936 : '&Psi;', // capital Psi 937 : '&Omega;', // capital Omega 945 : '&alpha;', // small alpha 946 : '&beta;', // small beta 947 : '&gamma;', // small gamma 948 : '&delta;', // small delta 949 : '&epsilon;', // small epsilon 950 : '&zeta;', // small zeta 951 : '&eta;', // small eta 952 : '&theta;', // small theta 953 : '&iota;', // small iota 954 : '&kappa;', // small kappa 955 : '&lambda;', // small lambda 956 : '&mu;', // small mu 957 : '&nu;', // small nu 958 : '&xi;', // small xi 959 : '&omicron;', // small omicron 960 : '&pi;', // small pi 961 : '&rho;', // small rho 962 : '&sigmaf;', // small sigma final 963 : '&sigma;', // small sigma 964 : '&tau;', // small tau 965 : '&upsilon;', // small upsilon 966 : '&phi;', // small phi 967 : '&chi;', // small chi 968 : '&psi;', // small psi 969 : '&omega;', // small omega 977 : '&thetasym;', // small theta symbol 978 : '&upsih;', // small upsilon symbol 982 : '&piv;', // small pi symbol 8224 : '&dagger;', // dagger 8225 : '&Dagger;', // 2 sided dagger 8226 : '&bull;', // bullet 8230 : '&hellip;', // horizontal ellipsis 8240 : '&permil;', // per mile 8242 : '&prime;', // prime, minute mark 8243 : '&Prime;', // double prime, second mark 8249 : '&lsaquo;', // single left angle quotation 8250 : '&rsaquo;', // single right angle quotation 8254 : '&oline;', // overline 8260 : '&frasl;', // fraction slash 8472 : '&weierp;', // weierstrassian function p 8465 : '&image;', // imaginary part of 8476 : '&real;', // real part of 8482 : '&trade;', // trademark sign 8501 : '&alefsym;', // first transfinite cardinal 8592 : '&larr;', // left arrow 8593 : '&uarr;', // up arrow 8594 : '&rarr;', // right arrow 8595 : '&darr;', // down arrow 8596 : '&harr;', // left-right arrow 8629 : '&crarr;', // carriage return arrow 8656 : '&lArr;', // left double arrow 8657 : '&uArr;', // up double arrow 8658 : '&rArr;', // right double arrow 8659 : '&dArr;', // down double arrow 8660 : '&hArr;', // left-right double arrow 8704 : '&forall;', // for all 8706 : '&part;', // partial differential 8707 : '&exist;', // there exists 8709 : '&empty;', // empty set, diameter 8711 : '&nabla;', // backward difference 8712 : '&isin;', // element of 8713 : '&notin;', // not an element of 8715 : '&ni;', // contains as member 8719 : '&prod;', // product sign 8721 : '&sum;', // n-ary sumation 8722 : '&minus;', // minus sign 8727 : '&lowast;', // asterisk operator 8730 : '&radic;', // radical sign 8733 : '&prop;', // proportional to 8734 : '&infin;', // infinity 8736 : '&ang;', // angle 8743 : '&and;', // logical and, wedge 8744 : '&or;', // logical or, vee 8745 : '&cap;', // intersection, cap 8746 : '&cup;', // union, cup 8747 : '&int;', // integral 8756 : '&there4;', // therefore 8764 : '&sim;', // tilde operator, similar to 8773 : '&cong;', // approximatley equal to 8776 : '&asymp;', // asymptotic to 8800 : '&ne;', // not equal to 8801 : '&equiv;', // identical to 8804 : '&le;', // less-than or equal to 8805 : '&ge;', // greater-than or equal to 8834 : '&sub;', // subset of 8835 : '&sup;', // superset of 8836 : '&nsub;', // not a subset of 8838 : '&sube;', // subset of or equal to 8839 : '&supe;', // superset of or qual to 8853 : '&oplus;', // direct sum 8855 : '&otimes;', // vector product 8869 : '&perp;', // perpendicular 8901 : '&sdot;', // dot operator 8968 : '&lceil;', // apl upstile 8969 : '&rceil;', // right ceiling 8970 : '&lfloor;', // apl downstile 8971 : '&rfloor;', // right floor 9001 : '&lang;', // left-pointing angle bracket, bra 9002 : '&rang;', // right-pointing angle bracket, ket 9674 : '&loz;', // lozenge 9824 : '&spades;', // black spade suit 9827 : '&clubs;', // black club suit, shamrock 9829 : '&hearts;', // black heart suit, valentine 9830 : '&diams;' // black diamond suit }; } // Carry out replacement for each entities (see bug #4182) for(var code in entities_array) { entity = entities_array[code]; var reg = new RegExp("&#" + code + ";", "g"); html_code = html_code.replace(reg, entity); var reg = new RegExp(String.fromCharCode(code), "g"); html_code = html_code.replace(reg, entity); } return html_code; }; </script> <script type="text/javascript" src="https://www.iucr.org/__fudge/wysiwyg/core/core.js"></script> <script type="text/javascript" src="https://www.iucr.org/__fudge/wysiwyg/core/utility.js"></script> <script type="text/javascript" src="https://www.iucr.org/__fudge/wysiwyg/core/htmlarea-lang-en.js"></script> <script type="text/javascript" src="https://www.iucr.org/__fudge/wysiwyg/core/dialog.js"></script> <style type="text/css"> @import url("https://www.iucr.org/__fudge/wysiwyg/core/htmlarea.css"); </style> <script type="text/javascript"> HTMLArea.Config_calendar_event_single_0_1442 = function () { this.version = "3.0"; // enable creation of a status bar? this.statusBar = false; this.width = "100%"; this.height = "480px"; // use an iFrame or a DIV? this.bodyType = "iframe"; // the next parameter specifies whether the toolbar should be included // in the size or not. this.sizeIncludesToolbar = true; this.bodyStyle = "background-color: #ffffff; font-family: verdana,sans-serif"; this.styleSheets = []; this.editorURL = ""; // URL-s this.imgURL = "https://www.iucr.org/__fudge/wysiwyg/images/"; this.pluginURL = "https://www.iucr.org/__fudge/wysiwyg/plugins/"; this.replaceNextLines = 0; this.plainTextInput = 0; this.toolbar = [ [ ["bold"], ["italic"], ["underline"], ["strikethrough"], ["replacetext"], ["searchandreplace"], ["fontname"], ["fontsize"], ["formatblock"], ["selectall"], ["inserthorizontalrule"], ["subscript"], ["superscript"], ["separator"] ], [ ["formatblock"], ["separator"] ], [ ["justifyleft"], ["justifycenter"], ["justifyright"], ["justifyfull"], ["separator"] ], [ ["undo"], ["redo"], ["separator"] ], [ ["outdent"], ["indent"], ["separator"] ], [ ["orderedlist"], ["unorderedlist"], ["separator"] ], [ ["inserttable"], ["tableproperties"], ["separator"] ], [ ["forecolor"], ["backcolor"], ["separator"] ], [ ["matrixcreatelink"], ["matrixunlink"], ["matrixcreateanchor"], ["matrixinsertimage"], ["matrixembedmovie"], ["matrixembedyoutube"], ["separator"] ], [ ["matrixabbr"], ["matrixacronym"], ["separator"] ], [ ["insertspecialchar"], ["separator"] ], [ ["chooselang"], ["separator"] ], [ ["matrix_dt"], ["matrix_dd"], ["separator"] ], [ ["misccite"], ["miscdfn"], ["quotation"], ["separator"] ], [ ["visual_aid"], ["separator"] ], [ ["spellchecker"], ["textindicator"], ["htmlmode"], ["separator"] ] ]; // ID, CMD, ToolTip, In text mode?, Image Position, Context this.btnList = { bold: ["Bold", "Bold", false, 14, ""], italic: ["Italic", "Italic", false, 15, ""], underline: ["Underline", "Underline", false, 16, ""], strikethrough: ["StrikeThrough", "StrikeThrough", false, 17, ""], replacetext: ["ReplaceText", "Replace Text", false, 11, ""], searchandreplace: ["SearchAndReplace", "Search And Replace", false, 69, ""], selectall: ["SelectAll", "Select All", false, 6, ""], inserthorizontalrule: ["InsertHorizontalRule", "Horizontal Rule", false, 31, ""], subscript: ["SubScript", "Subscript", false, 18, ""], superscript: ["SuperScript", "SuperScript", false, 19, ""], justifyleft: ["JustifyLeft", "Justify Left", false, 22, ""], justifycenter: ["JustifyCenter", "Justify Center", false, 23, ""], justifyright: ["JustifyRight", "Justify Right", false, 24, ""], justifyfull: ["JustifyFull", "Justify Full", false, 25, ""], undo: ["Undo", "Undo", false, 12, ""], redo: ["Redo", "Redo", false, 13, ""], outdent: ["Outdent", "Decrease Indent", false, 28, ""], indent: ["Indent", "Increase Indent", false, 29, ""], orderedlist: ["InsertOrderedList", "Ordered List", false, 26, ""], unorderedlist: ["InsertUnorderedList", "Bulleted List", false, 27, ""], inserttable: ["InsertTable", "Insert Table", false, 35, ""], tableproperties: ["TableProperties", "Table Properties", false, 36, "table"], forecolor: ["foreColor", "Text Color", false, 20, ""], backcolor: ["BackColor", "Background Color", false, 21, ""], matrixcreatelink: ["MatrixCreateLink", "Insert Link", false, 32, ""], matrixunlink: ["Unlink", "Remove Link", false, 33, ""], matrixcreateanchor: ["MatrixCreateAnchor", "Insert Anchor", false, 30, ""], matrixinsertimage: ["MatrixInsertImage", "Insert Image", false, 34, ""], matrixembedmovie: ["MatrixEmbedMovie", "Embed Movie", false, 53, ""], matrixembedyoutube: ["MatrixEmbedYouTube", "Embed YouTube", false, 67, ""], matrixabbr: ["MatrixAbbr", "Insert Abbreviation", false, 64, ""], matrixacronym: ["MatrixAcronym", "Insert Acronym", false, 66, ""], insertspecialchar: ["InsertSpecialChar", "Insert Special Character", false, 2, ""], matrix_dt: ["Matrix_DT", "Insert Definition Term", false, 63, ""], matrix_dd: ["Matrix_DD", "Insert Definition Description", false, 62, ""], misccite: ["MiscCite", "Insert Citation", false, 58, ""], miscdfn: ["MiscDfn", "Insert Definition", false, 59, ""], quotation: ["Quotation", "Quotation", false, 60, ""], visual_aid: ["Visual_Aid", "Visual Aid", false, 61, ""], spellchecker: ["spellchecker", "Check Spelling", false, 54, ""], htmlmode: ["HtmlMode", "Toggle HTML Source", true, 3, ""] }; // initialize tooltips from the I18N module for (var i in this.btnList) { var btn = this.btnList[i]; if (typeof HTMLArea.I18N.tooltips[i] != "undefined") { btn[1] = HTMLArea.I18N.tooltips[i]; } } }; </script> <script type="text/javascript"> // Handle unknown IE tags if (HTMLArea.is_ie) { // Create a dummy "abbr" element for the DOM var dom_abbr = document.createElement('ABBR'); } </script> <textarea id="calendar_event_single_0_1442" name="calendar_event_single_0_1442" ></textarea> <script type="text/javascript"> editor_calendar_event_single_0_1442 = new HTMLArea("calendar_event_single_0_1442"); editor_calendar_event_single_0_1442._createToolbar(); editor_calendar_event_single_0_1442._createStatusBar(); editor_calendar_event_single_0_1442.updateToolbar(false); editor_calendar_event_single_0_1442.set_dir_attr(''); </script> </div> <div id="calendar_event_single_0_1442_contents_div" onclick="editDiv=document.getElementById('calendar_event_single_0_1442_wysiwyg_div'); if (editDiv.style.display == 'none') {switchEditingMode('calendar_event_single_0_1442_contents_div','calendar_event_single_0_1442_wysiwyg_div', editor_calendar_event_single_0_1442);}"></div> </div> </td> </tr> <tr> <td id="_td2_0" valign="top" style="style=">Location (<em>e.g.</em> "Adelaide")</td> <td id="_td2_1" valign="top" style="style="> &nbsp;&nbsp;&nbsp; <div id="metadata_field"> <input type="text" name="metadata_field_text_1563_calendar_event_single_value" value="" size="30" class="sq-form-field" id="metadata_field_text_1563_calendar_event_single_value" /> </div> </td> </tr> <tr> <td id="_td4a_0" valign="top">Website (<em>please include http:// in address</em>)</td> <td id="_td4a_1" valign="top"> &nbsp;&nbsp;&nbsp; <div id="metadata_field"> <input type="text" name="metadata_field_text_69973_calendar_event_single_value" value="" size="60" class="sq-form-field" id="metadata_field_text_69973_calendar_event_single_value" /> </div> </td> </tr> </tbody> </table> <h3>6. Contact details</h3> <table cellpadding="3"> <tbody> <tr> <td id="_td5_0" valign="top" style="style=">Contact name</td> <td id="_td5_1" valign="top" style="style="> &nbsp;&nbsp;&nbsp; <div id="metadata_field"> <input type="text" name="metadata_field_text_3318_calendar_event_single_value" value="" size="30" class="sq-form-field" id="metadata_field_text_3318_calendar_event_single_value" /> </div> </td> </tr> <tr> <td id="_td6_0" valign="top">Contact email address</td> <td id="_td6_1" valign="top"> &nbsp;&nbsp;&nbsp; <div id="metadata_field"> <input type="text" name="metadata_field_text_3730_calendar_event_single_value" value="" size="30" class="sq-form-field" id="metadata_field_text_3730_calendar_event_single_value" /> </div> </td> </tr> </tbody> </table><br /> <h3>7. Add logo</h3> <p><span id="gallery"><a id="gallery_link" name="gallery_link">Click to view library of meeting logos</a></span></p>&nbsp;<input id="thumbnail" name="default_thumb" type="hidden" value="92062" /> </form> <div id="thumb_icon"></div> <hr /> <!-- <p>To make sure that this is a genuine request from someone interested in crystallography, and not a robotic web program, please type into the box the lowercase letters or numbers that you can see in the picture.</p> --> <p><span style="color: rgb(102, 102, 102); font-family: verdana, arial, sans-serif; font-size: 11.2px;">To make sure that this is a genuine request from someone interested in crystallography, and not a robotic web program, please type into the box the lowercase letters or numbers that you can see in the picture.</span><br /> <table border="0"> <tr> <td valign="top"><input type="text" name="SQ_SYSTEM_SECURITY_KEY_VALUE" value="" size="8" class="sq-form-field" id="SQ_SYSTEM_SECURITY_KEY_VALUE" /></td> <td valign="top"><img id="sq_security_key" src="/calendar/etc/add-meeting?SQ_ACTION=send_security_key" alt="Security key" border="0" /> </td> </tr> <tr> <td class="sq-backend-data" id="sq_regen_captcha" colspan="2"><i>Can't read the security key? <a href="#" onclick="var img = document.getElementById('sq_security_key'); img.src = '/calendar/etc/add-meeting?SQ_ACTION=send_security_key&amp;regen_key=1&amp;t=' + new Date().getTime(); return false;">Click here to get a new key</a></i></td> </tr> </table> <a name="section_1"></a> <table class="sq-backend-section-table"> <tr> <td class="sq-limbo-section-heading"> </td> </tr> <tr> <td> <table class="sq-backend-section-table-inner"> <tr> <td class="sq-backend-data sq-backend-commit"> <input type="hidden" name="sq_lock_release" value="0" class="sq-form-field" id="sq_lock_release" /><input type="button" name="sq_commit_button" id="sq_commit_button" value="Commit" accesskey="s" onclick="if (submit_form) { submit_form(this.form); } else { this.form.submit(); this.disabled = 'disabled';} " class="sq-form-field" /> </td> </tr> </table> </td> </tr> </table> </p> </div> <script type="text/javascript"> /* The 'countries', 'topics' and 'types' selectors establish root notes for creating/linking calendar items. To characterize these in the display of the calendar event, we wish to capture the values in specific metadata fields. This form has three such input fields, but to save the effort of filling them in manually, they are hidden and completed by jQuery event handlers */ // countries (only one may be chosen) jQuery('#countries').change(function(){ var str_country = ""; $( "select#countries option:selected" ).each(function() { s = $( this ).html(); // replace delimiters, e.g. - - Italy s = s.replace(/&nbsp;/g, " ").replace(/^[- ]*/, ""); str_country += s + " "; }); // alert(str_country) jQuery('input#metadata_field_text_90234_calendar_event_single_value').val(str_country); }); // topics (more than one may be chosen) jQuery( "input[id^='topics']").change(function(){ var str_topic = ""; $( "input[id^='topics']:checked" ).each(function() { s = $( this ).next().html(); if (str_topic) { str_topic += " | "; } str_topic += s; }); // alert(str_topic) jQuery('input#metadata_field_text_90236_calendar_event_single_value').val(str_topic); }); // types (more than one may be chosen) jQuery( "input[id^='types']").change(function(){ var str_type = ""; $( "input[id^='types']:checked" ).each(function() { s = $( this ).next().html(); if (str_type) { str_type += " | "; } str_type += s; }); // alert(str_type) jQuery('input#metadata_field_text_90235_calendar_event_single_value').val(str_type); }); // check date in popup calendar function popitup(url) { newwindow=window.open(url,'name','height=480,width=640'); if (window.focus) {newwindow.focus()} return false; } function ZeroPadNumber ( nValue ) { if ( nValue < 10 ) { return ( '0' + nValue.toString () ); } else { return ( nValue ); } } jQuery( "input[id='calendar_event_single_0_start_year']").click(function(){ var yr = $( this ). val(); var mo = $( this ). prev() . val(); var dy = $( this ). prev() . prev() . val(); var date = yr + "-" + ZeroPadNumber(mo) + "-" + ZeroPadNumber(dy); popitup("https://www.iucr.org/calendar/check?SQ_CALENDAR_VIEW=week&SQ_CALENDAR_DATE=" + date); }); function toggle(obj) { var el = document.getElementById(obj); if ( el.style.display != 'none' ) { el.style.display = 'none'; } else { el.style.display = ''; } } </script> <script type="text/javascript"> ;(function($) { // DOM Ready $(function() { // Binding a click event // From jQuery v.1.7.0 use .on() instead of .bind() $('#gallery').bind('click', function(e) { // Prevents the default action to be triggered. e.preventDefault(); // Triggering bPopup when click event is fired $('#checkgal').bPopup({ opacity: 0.0, position: ['auto', 0], modal: true, easing: 'linear', loadUrl: "https://www.iucr.org/calendar/logos/conference-logos" }); }); }); })(jQuery); </script><script type="text/javascript"> var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var date; $(function() { $('#start').datepick({dateFormat: "dd M yyyy", onSelect: function(dateText, inst) { var pieces = dateText.toString().split(' '); $('#calendar_event_single_0_start_day').val(pieces[2]); $('#calendar_event_single_0_start_month').val(months.indexOf(pieces[1])+1); $('#calendar_event_single_0_start_year').val(pieces[3]); date = pieces[2] + '-' + ZeroPadNumber(months.indexOf(pieces[1])+1) + '-' + pieces[0]; date = pieces[3] + '-' + ZeroPadNumber(months.indexOf(pieces[1])+1) + '-' + pieces[2]; fdate = pieces[2] + ' ' + pieces[1] + ' ' + pieces[3]; /* alert(pieces + ' || ' + date + ' | ' + fdate); */ var enddate = $('#finish').val(); if (!enddate) { // if empty, populate the end date with same values /* $('#finish').val(dateText); */ $('#finish').val(fdate); $('#calendar_event_single_0_end_day').val(pieces[2]); $('#calendar_event_single_0_end_month').val(months.indexOf(pieces[1])+1); $('#calendar_event_single_0_end_year').val(pieces[3]); } // popitup("https://www.iucr.org/calendar/check?SQ_CALENDAR_VIEW=week&SQ_CALENDAR_DATE=" + date); /* */ $('#checkcal').bPopup({ // contentContainer: '.checkcal', opacity: 0.0, position: ['auto', 0], // follow: [true, false], modal: true, easing: 'linear', loadUrl: "https://www.iucr.org/calendar/check?SQ_CALENDAR_VIEW=week&SQ_CALENDAR_DATE=" + date }); /* */ } }); }); $(function() { $('#finish').datepick({dateFormat: "dd M yyyy", onSelect: function(dateText, inst) { var pieces = dateText.toString().split(' '); $('#calendar_event_single_0_end_day').val(pieces[2]); $('#calendar_event_single_0_end_month').val(months.indexOf(pieces[1])+1); $('#calendar_event_single_0_end_year').val(pieces[3]); $('#calendar_event_single_0_end_enabled').prop("checked", true); $('#calendar_event_single_0_end_date_enabled').attr({'value': 'date'}); $('#calendar_event_single_0_end_date_enabled').prop("checked", true); $('#calendar_event_single_0_end_date_enabled').removeAttr("disabled"); $('#calendar_event_single_0_end_day').removeAttr("disabled"); $('#calendar_event_single_0_end_month').removeAttr("disabled"); $('#calendar_event_single_0_end_year').removeAttr("disabled"); } }); }); </script> <style> /* ThemeRoller override style sheet for jQuery date picker v5.0.1. */ .ui-datepicker { display: block; } #ui-datepicker-div, .ui-datepicker-inline { width: 17em; font-size: 75%; } #ui-datepicker-div { z-index: 100; } .ui-datepicker-inline { float: left; } .ui-datepicker-rtl { direction: rtl; } #ui-datepicker-div a, .ui-datepicker-inline a { text-decoration: none; } .ui-datepicker-prompt { height: 1.5em; padding-top: 0.25em; text-align: center; } button.ui-datepicker-cmd { height: 2em; } .ui-datepicker-cmd-clear { float: left; margin-left: 0.25em; } .ui-datepicker-cmd-close { float: right; margin-right: 0.25em; } .ui-datepicker-cmd-prev { position: static; float: left; width: 30%; height: auto; margin-left: 1%; } .ui-datepicker-cmd-next { position: static; float: right; width: 30%; height: auto; margin-right: 1%; text-align: right; } .ui-datepicker-cmd-current, .ui-datepicker-cmd-today { float: left; width: 37%; text-align: center; } .ui-datepicker-month-nav { float: left; text-align: center; } .ui-datepicker-month-nav div { float: left; width: 12.5%; margin: 1%; padding: 1%; } .ui-datepicker-month-nav span { color: #888; } .ui-datepicker-row-break { width: 100%; font-size: 100%; } .ui-datepicker-group { float: left; width: 17em; } .ui-datepicker-group .ui-datepicker-header { height: 1.5em; text-align: center; } .ui-datepicker select, .ui-datepicker-inline select { width: auto; height: 1.66em; border: none; font-weight: bold; } .ui-datepicker th { padding: 0.5em 0.3em; } .ui-datepicker td, .ui-datepicker td a, .ui-datepicker td span { border: 1px solid transparent; text-align: center; } .ui-datepicker-status { padding: 0.25em 0em; text-align: center; } .ui-datepicker .ui-helper-clearfix { clear: both; } .ui-datepicker-cover { display: none; display/**/: block; position: absolute; z-index: -1; filter: mask(); top: -1px; left: -1px; width: 187px; height: 187px; } </style><div id="checkcal"></div> <div id="checkgal"></div> <script type="text/javascript"> /*================================================================================ * @name: bPopup - if you can't get it up, use bPopup * @author: (c)Bjoern Klinggaard (twitter@bklinggaard) * @demo: http://dinbror.dk/bpopup * @version: 0.9.4.min ================================================================================*/ (function(b){b.fn.bPopup=function(z,F){function K(){a.contentContainer=b(a.contentContainer||c);switch(a.content){case "iframe":var h=b('<iframe class="b-iframe" '+a.iframeAttr+"></iframe>");h.appendTo(a.contentContainer);r=c.outerHeight(!0);s=c.outerWidth(!0);A();h.attr("src",a.loadUrl);k(a.loadCallback);break;case "image":A();b("<img />").load(function(){k(a.loadCallback);G(b(this))}).attr("src",a.loadUrl).hide().appendTo(a.contentContainer);break;default:A(),b('<div class="b-ajax-wrapper" id="popUpWindow"></div>').load(a.loadUrl,a.loadData,function(){k(a.loadCallback);G(b(this))}).hide().appendTo(a.contentContainer)}}function A(){a.modal&&b('<div class="b-modal '+e+'"></div>').css({backgroundColor:a.modalColor,position:"fixed",top:0,right:0,bottom:0,left:0,opacity:0,zIndex:a.zIndex+t}).appendTo(a.appendTo).fadeTo(a.speed,a.opacity);D();c.data("bPopup",a).data("id",e).css({left:"slideIn"==a.transition||"slideBack"==a.transition?"slideBack"==a.transition?g.scrollLeft()+u:-1*(v+s):l(!(!a.follow[0]&&m||f)),position:a.positionStyle||"absolute",top:"slideDown"==a.transition||"slideUp"==a.transition?"slideUp"==a.transition?g.scrollTop()+w:x+-1*r:n(!(!a.follow[1]&&p||f)),"z-index":a.zIndex+t+1}).each(function(){a.appending&&b(this).appendTo(a.appendTo)});H(!0)}function q(){a.modal&&b(".b-modal."+c.data("id")).fadeTo(a.speed,0,function(){b(this).remove()});a.scrollBar||b("html").css("overflow","auto");b(".b-modal."+e).unbind("click");g.unbind("keydown."+e);d.unbind("."+e).data("bPopup",0<d.data("bPopup")-1?d.data("bPopup")-1:null);c.undelegate(".bClose, ."+a.closeClass,"click."+e,q).data("bPopup",null);H();return!1}function G(h){var b=h.width(),e=h.height(),d={};a.contentContainer.css({height:e,width:b});e>=c.height()&&(d.height=c.height());b>=c.width()&&(d.width=c.width());r=c.outerHeight(!0);s=c.outerWidth(!0);D();a.contentContainer.css({height:"auto",width:"auto"});d.left=l(!(!a.follow[0]&&m||f));d.top=n(!(!a.follow[1]&&p||f));c.animate(d,250,function(){h.show();B=E()})}function L(){d.data("bPopup",t);c.delegate(".bClose, ."+a.closeClass,"click."+e,q);a.modalClose&&b(".b-modal."+e).css("cursor","pointer").bind("click",q);M||!a.follow[0]&&!a.follow[1]||d.bind("scroll."+e,function(){B&&c.dequeue().animate({left:a.follow[0]?l(!f):"auto",top:a.follow[1]?n(!f):"auto"},a.followSpeed,a.followEasing)}).bind("resize."+e,function(){w=y.innerHeight||d.height();u=y.innerWidth||d.width();if(B=E())clearTimeout(I),I=setTimeout(function(){D();c.dequeue().each(function(){f?b(this).css({left:v,top:x}):b(this).animate({left:a.follow[0]?l(!0):"auto",top:a.follow[1]?n(!0):"auto"},a.followSpeed,a.followEasing)})},50)});a.escClose&&g.bind("keydown."+e,function(a){27==a.which&&q()})}function H(b){function d(e){c.css({display:"block",opacity:1}).animate(e,a.speed,a.easing,function(){J(b)})}switch(b?a.transition:a.transitionClose||a.transition){case "slideIn":d({left:b?l(!(!a.follow[0]&&m||f)):g.scrollLeft()-(s||c.outerWidth(!0))-C});break;case "slideBack":d({left:b?l(!(!a.follow[0]&&m||f)):g.scrollLeft()+u+C});break;case "slideDown":d({top:b?n(!(!a.follow[1]&&p||f)):g.scrollTop()-(r||c.outerHeight(!0))-C});break;case "slideUp":d({top:b?n(!(!a.follow[1]&&p||f)):g.scrollTop()+w+C});break;default:c.stop().fadeTo(a.speed,b?1:0,function(){J(b)})}}function J(b){b?(L(),k(F),a.autoClose&&setTimeout(q,a.autoClose)):(c.hide(),k(a.onClose),a.loadUrl&&(a.contentContainer.empty(),c.css({height:"auto",width:"auto"})))}function l(a){return a?v+g.scrollLeft():v}function n(a){return a?x+g.scrollTop():x}function k(a){b.isFunction(a)&&a.call(c)}function D(){x=p?a.position[1]:Math.max(0,(w-c.outerHeight(!0))/2-a.amsl);v=m?a.position[0]:(u-c.outerWidth(!0))/2;B=E()}function E(){return w>c.outerHeight(!0)&&u>c.outerWidth(!0)}b.isFunction(z)&&(F=z,z=null);var a=b.extend({},b.fn.bPopup.defaults,z);a.scrollBar||b("html").css("overflow","hidden");var c=this,g=b(document),y=window,d=b(y),w=y.innerHeight||d.height(),u=y.innerWidth||d.width(),M=/OS 6(_\d)+/i.test(navigator.userAgent),C=200,t=0,e,B,p,m,f,x,v,r,s,I;c.close=function(){a=this.data("bPopup");e="__b-popup"+d.data("bPopup")+"__";q()};return c.each(function(){b(this).data("bPopup")||(k(a.onOpen),t=(d.data("bPopup")||0)+1,e="__b-popup"+t+"__",p="auto"!==a.position[1],m="auto"!==a.position[0],f="fixed"===a.positionStyle,r=c.outerHeight(!0),s=c.outerWidth(!0),a.loadUrl?K():A())})};b.fn.bPopup.defaults={amsl:50,appending:!0,appendTo:"body",autoClose:!1,closeClass:"b-close",content:"ajax",contentContainer:!1,easing:"swing",escClose:!0,follow:[!0,!0],followEasing:"swing",followSpeed:500,iframeAttr:'scrolling="no" frameborder="0"',loadCallback:!1,loadData:!1,loadUrl:!1,modal:!0,modalClose:!0,modalColor:"#000",onClose:!1,onOpen:!1,opacity:0.7,position:["auto","auto"],positionStyle:"absolute",scrollBar:!0,speed:250,transition:"fadeIn",transitionClose:!1,zIndex:9997}})(jQuery); </script> </div> <script type="text/javascript"> </script> </div> </form> </div> <!-- iucr indexable content ends here --> <!-- Right sidebar can host a calendar navigator, navigation menu and adverts --> <div class="sidebar one_quarter" style="float:right;"></div> <div class="sidebar one_quarter" style="float:right;"></div> </div> </main> </div> <!-- ################################### END OF MAIN BODY ################################## --> <!-- ####################################################################################### --> <!-- ############################# ITEMS OF INTEREST (ON HOME PAGE) ######################## --> <!-- ####################################################################################### --> <!-- ####################################################################################### --> <!-- ####################################################################################### --> <!-- ############################### LIST OF SPONSORS ###################################### --> <!-- ####################################################################################### --> <!-- ####################################################################################### --> <!-- ####################################################################################### --> <!-- ############################### SECONDARY BANNER ###################################### --> <!-- ####################################################################################### --> <!-- ####################################################################################### --> <!-- ####################################################################################### --> <!-- ######################## NEWSLETTER ITEMS (ON HOME PAGE) ############################## --> <!-- ####################################################################################### --> <!-- ####################################################################################### --> <!-- ####################################################################################### --> <!-- ################################# SITE MAP/INDEX ###################################### --> <!-- ####################################################################################### --> <div class="wrapper row1"> <div id="quicklinks" class="hoc clear"> <!-- ####################################################################################### --> <div class="accordion"> <!-- ####################################################################################### --> <a href="javascript:void(0);" class="accordiontoggle heading">Quick links</a> <!-- ####################################################################################### --> <div class="linkblock group"> <div class="one_quarter first"> <!-- ################################################################################################ --> <ul> <li><a href="https://www.iucr.org/news/notices/announcements">Announcements</a></li> <li><a href="https://www.iucr.org/people/associates">Associates Programme</a></li> <li><a href="https://www.iucr.org/resources/blogs">Blogs</a></li> <li><a href="https://www.iucr.org/iucr/bragg-prize">Bragg Prize</a></li> <li><a href="https://www.iucr.org/calendar/calendar-of-events">Calendar of Events</a></li> <li><a href="https://www.iucr.org/resources/commissions">Commissions</a></li> <li><a href="https://www.iucr.org/iucr/governance/advisory-committees/committee-on-data">Committee on Data</a></li> <li><a href="https://www.iucr.org/iucr/cong">Congress and General Assembly</a></li> <li><a href="https://www.iucr.org/outreach/crystal-growing-competition">Crystal growing competition</a></li> <li><a href="https://www.iucr.org/resources/cif">Crystallographic Information Framework (CIF)</a></li> <li><a href="https://www.iucr.org/world">Crystallography around the world</a></li> <li><a href="https://www.iucr.org/resources/forums">Discussion forums</a></li> </ul> <!-- ################################################################################################ --> </div> <div class="one_quarter"> <!-- ################################################################################################ --> <ul> <li><a href="https://www.iucr.org/resources/lists">Discussion lists</a></li> <li><a href="https://www.iucr.org/iucr/ewald-prize">Ewald Prize</a></li> <li><a href="https://www.iucr.org/iucr/governance/ec">Executive Committee</a></li> <li><a href="https://www.iucr.org/iucr/governance/finance.html">Finance Committee</a></li> <!-- <li><a href="./?a=143598">Gender Equity and Diversity Committee</a></li> --> <li><a href="https://www.iucr.org/iucr/governance/advisory-committees/gedc">Gender Equity and Diversity Committee</a></li> <li><a href="https://www.iucr.org/iucr/history">History of the Union</a></li> <li><a href="https://www.iucr.org/books2008/international-tables"><it>International Tables for Crystallography</it></a></li> <li><a href="https://iycr2014.org/about"><it>International Year of Crystallography</it></a></li> <li><a href="https://www.iucr.org/news/notices/employment">Jobs</a></li> <li><a href="https://www.iucr.org/retired/journals">Journals</a></li> <li><a href="https://www.iucr.org/resources/nexus">Lachlan Cranswick Crystallographic NeXus</a></li> </ul> <!-- ################################################################################################ --> </div> <div class="one_quarter"> <!-- ################################################################################################ --> <ul> <li><a href="https://www.iucr.org/outreach/laamp">Lightsources for Africa, the Americas, Asia and Middle East Project (LAAAMP)</a></li> <li><a href="https://www.iucr.org/iucr/ab.html">Membership</a></li> <li><a href="https://www.iucr.org/iucr/sponsorship/meetings.html">Meetings support</a></li> <li><a href="https://www.iucr.org/news/newsletter">Newsletter</a></li> <li><a href="https://www.iucr.org/people/nobel-prize">Nobel Prizes</a></li> <li><a href="https://www.iucr.org/people/crystallographers">Obituaries</a></li> <li><a href="https://www.iucr.org/outreach/openlabs">OpenLabs</a></li> <li><a href="https://www.iucr.org/iucr/governance/advisory-committees/book-series">OUP Book Series</a></li> <li><a href="https://www.iucr.org/iucr/sponsorship/iucr-outreach-fund">Outreach and Education Fund</a></li> <li><a href="https://www.iucr.org/people/photos">Photo galleries</a></li> <li><a href="https://www.iucr.org/publications">Publications</a></li> <li><a href="https://www.iucr.org/news/rss-feeds">RSS feeds</a></li> </ul> <!-- ################################################################################################ --> </div> <div class="one_quarter"> <!-- ################################################################################################ --> <ul> <li><a href="https://www.iucr.org/iucr/2abbeysq.html">Secretariat</a></li> <li><a href="https://www.iucr.org/resources/other-directories/software">Software list</a></li> <li><a href="https://www.iucr.org/iucr/governance/statutes-and-by-laws">Statutes and By-Laws</a></li> <li><a href="https://www.iucr.org/iucr/sponsorship/meetings.html">Support of Meetings</a></li> <li><a href="https://www.iucr.org/resources/symmetry-font">Symmetry font</a></li> <li><a href="https://www.iucr.org/education/pamphlets">Teaching Pamphlets</a></li> <li><a href="https://www.iucr.org/iucr/sponsorship/vp.html">Visiting Professorship scheme</a></li> <li><a href="https://www.iucr.org/people/wdc"><it>World Directory of Crystallographers</it></a></li> </ul> <!-- ################################################################################################ --> </div> </div> <!-- ####################################################################################### --> <!-- ####################################################################################### --> </div> <!-- ######################################################################################### --> </div> </div> <!-- ####################################################################################### --> <!-- ############################# STANDARD FOOTER ######################################### --> <!-- ####################################################################################### --> <div class="wrapper row4"> <footer id="footer" class="hoc clear"> <div class="group"> <div class="one_third first"> <h6 class="title">International Union of Crystallography</h6> <p class="btmspace-30">Scientific Union Member of the International Science Council (admitted 1947). Member of CODATA, the ISC Committee on Data. Partner with UNESCO, the United Nations Educational, Scientific and Cultural Organization in the International Year of Crystallography 2014.</p> <ul class="nospace inline pushright"> <li><a href="https://www.iucr.org/home/contact-us">Contact</a></li> <li><a href="/cgi-bin/iucrsearch">Search</a></li> <li><a href="//journals.iucr.org/services/privacy.html">Privacy</a></li> </ul> </div> <div class="one_third"> <h6 class="title">International Science Council Scientific Freedom Policy</h6> <article> <!-- <h2 class="nospace font-x1"><a href="#">ICSU Scientific Freedom Policy Statement</a></h2> <time class="font-xs" datetime="2045-04-06">Friday, 6<sup>th</sup> April 2045</time> --> <p>The IUCr observes the basic policy of non-discrimination and affirms the right and freedom of scientists to associate in international scientific activity without regard to such factors as ethnic origin, religion, citizenship, language, political stance, gender, sex or age, in accordance with the Statutes of the International Council for Science.</p> <p><a href="https://www.iucr.org/iucr/governance/advisory-committees/gedc">IUCr policy on Gender Equity and Diversity</a></p> </article> </div> <div class="one_third"> <h6 class="title">Useful links</h6> <ul class="nospace linklist"> <li><a href="https://www.iucr.org/iucr/sponsorship/iucr-outreach-fund">Donate to the Outreach and Education Fund</a></li> <li><a href="https://www.iucr.org/people/associates">Join the Associates Programme</a></li> <li><a href="https://www.iucr.org/iucr/sponsorship/meetings.html">Request support for meeting</a></li> <li><a href="https://www.iucr.org/iucr/sponsorship/vp.html">Apply for Visiting Professorship</a></li> <li><a href="https://www.iucr.org/calendar/etc/add-meeting">Post details of a meeting</a></li> </ul> </div> </div> <!-- ####################################################################################### --> </footer> </div> <!-- ######################################################################################## --> <!-- ############################# COPYRIGHT/CREDITS ######################################## --> <!-- ######################################################################################## --> <div class="wrapper row5"> <div id="copyright" class="hoc clear"> <!-- ######################################################################################## --> <p class="fl_left">Copyright &copy; - All Rights Reserved - <a href="#">International Union of Crystallography</a></p> <!-- <p>Template by <a target="_blank" href="http://www.os-templates.com/" title="Free Website Templates">OS Templates</a></p> --> <!-- ######################################################################################## --> </div> </div> <!-- ######################################################################################## --> <!-- ################################## POST-CONTENT SCRIPTS etc. ########################### --> <!-- ######################################################################################## --> <a id="backtotop" href="#top"><i class="fa fa-chevron-up"></i></a> <!-- JAVASCRIPTS --> <script src="https://www.iucr.org/__data/assets/js_file/0020/129413/jquery.backtotop.js?v=0.1.1"></script> <script src="https://www.iucr.org/__data/assets/js_file/0004/129415/jquery.mobilemenu.js?v=0.1.4"></script> <!-- IE9 Placeholder Support --> <script src="https://www.iucr.org/__data/assets/js_file/0005/129416/jquery.placeholder.min.js?v=0.1.1"></script> <!-- / IE9 Placeholder Support --> <script type="text/javascript" src="https://www.iucr.org/__data/assets/js_file/0003/129765/tabber.js?v=0.1.1"></script> <script type="text/javascript" src="https://www.iucr.org/__data/assets/js_file/0010/129763/iucr.js?v=0.1.67"></script> <script type="text/javascript" src="https://www.iucr.org/__data/assets/js_file/0004/147586/slimbox2.js?v=0.0.2"></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10