<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'/>
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0em 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0em 1em;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<!--}}}-->
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)

<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations

----
Also see AdvancedOptions
<<importTiddlers>>
In Socialtext Unplugged, the selected pages of your Socialtext workspace are displayed as individual "tiddlers" on the page. When the mouse passes over a tiddler a short toolbar menu appears at the top right. Use the commands here to manipulate that particular tiddler: notably closing and editting it. (You can double click on a tiddler as a shortcut to directly enter edit mode).

Over on the right hand side of the window are commands that affect the entire page, in particular "close all" which can be useful to clear the decks when many tiddlers are open at once.

The user is encouraged to ensure that they can SaveChanges before embarking on widespread editing.
Welcome to Socialtext Unplugged. This is a specially designed web page that you can use to view and edit your Socialtext content without having to be online to your Socialtext server.

There are three steps to using Socialtext Unplugged:
* First, learn how to SaveChanges to your local hard drive. This keeps your work safe even if you close your browser or have to reboot your computer
* Secondly, find out how to BrowseAndEdit your content while it is unplugged
* Thirdly, when you can reconnect to your Socialtext server, you can SyncChanges to save your unplugged changes to the server so that other people can see them too

You should also check your system meets the SystemRequirements.
Socialtext Unplugged lets you browse and edit your content while you're offline. When you make a change you need to SaveChanges to save the change to your local hard drive, before later performing a SyncChanges to synchronise the change back to the server.

The procedure for SaveChanges is slightly different for different browsers:
* SavingOnInternetExplorer
* SavingOnFireFox
* SavingOnSafari
* SavingOnOpera
You can save changes with any version of FireFox, and also many other browsers in the FireFox family, such as Camino on the Mac and MiniMo on mobile devices. The procedure is:
# Click the button labelled 'save changes' over in the right hand sidebar
# If prompted with an "Internet Security" dialog as follows, click the checkbox labelled "Remember this decision" and then the "Allow" button
## "A script from "file://" is requesting enhanced capabilities that are UNSAFE and could be used to compromise your machine or data..."
# You should then see a message at the top right of the window saying "Main TiddlyWiki file saved"
If you accidentally //deny// permission instead, you may need to UnravelFireFoxPermissions.
You can save changes with Internet Explorer versions 6 and 7, but not the earlier versions. The procedure is:
# Click the button labelled 'save changes' over in the right hand sidebar
# If prompted as follows, click "Yes":
## "An ActiveX control on this page might be unsafe to interact with other parts of the page. Do you want to allow this interaction?"
# You should then see a message at the top right of the window saying "Main TiddlyWiki file saved"
Note that there is currently [[a bug|http://trac.tiddlywiki.org/tiddlywiki/ticket/39]] that prevents Internet Explorer from saving correctly if you have specified a backup directory in AdvancedOptions.
To SaveChanges on Opera, see the instructions for using the TiddlySaver Java applet.
To SaveChanges on Safari, see the instructions for using the TiddlySaver Java applet.
<<search>><<closeAll>><<permaview>><<newTiddler 'New Tiddler' fields:'server.host:"https://saturn.ffzg.hr%2C%20saturn.ffzg.hr:443" server.workspace:"koha-cug" wikiformat:socialtext'>><<newJournal 'DD MMM YYYY' fields:'server.host:"https://saturn.ffzg.hr%2C%20saturn.ffzg.hr:443" server.workspace:"koha-cug" wikiformat:socialtext'>><<saveChanges>><<backstage sync>><<slider chkSliderOptionsPanel OptionsPanel 'options ยป' 'Change TiddlyWiki advanced options'>>
Koha Croatian user group
Socialtext Unplugged
https://saturn.ffzg.hr/koha-cug/
[[SocialtextScreenStyle]]
[[SocialtextStyleOverrides]]
[[Styles HorizontalMainMenu]]
<<sync>>
@@The user interface for synchronization is not finalized@@
To synchronize your changes back to the Socialtext server:
# click on [[Sync]] in the right-hand sidebar
<<tabs txtMoreTab Orphans 'Orphaned tiddlers' TabMoreOrphans Shadowed 'Shadowed tiddlers' TabMoreShadowed>>
Under FireFox, you can run into problems if you accidentally click 'Deny' on the permission request dialog, and have selected //Remember this decision//.

To reverse the effects, first locate the file {{{prefs.js}}} in your FireFox profile directory. Under Windows you'll find it at something like {{{C:\Documents and Settings\Jeremy\Application Data\Mozilla\Firefox\Profiles\o3dhupu6.default\prefs.js}}}, where {{{Jeremy}}} is the name of your windows profile and {{{o3dhupu6}}} will be a similar string of gobbledegook. On the Mac it'll be at {{{~/Library/Application Support/Firefox/Profiles/o3dhupu6.default/prefs.js}}} and on most versions of Linux, at {{{~/.mozilla/firefox/o3dhupu6.default/prefs.js}}}.

Open the file in a text editor and find the line {{{user_pref("capability.principal.codebase.p0.denied", "UniversalXPConnect");}}} and simply replace the word {{{denied}}} with {{{granted}}}.
//(Thanks to JonScully for figuring out this fix)//
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler references > fields syncing jump'></div>
<div class='workspace' id='st-page-wiki-title' macro='view socialtext.workspace'></div>
<div class='title' id='st-page-titletext' macro='view title'></div>
<div class='subtitle'>
Created on <span macro='view created date [[MMM DD, 0hh:0mm]]'></span>.
Updated by <span macro='view modifier link'></span>
on <span macro='view modified date [[MMM DD, 0hh:0mm]]'></span></div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></span></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
/***
To use, add {{{[[Styles HorizontalMainMenu]]}}} to your StyleSheet tiddler.
See http://www.w3schools.com/css/css_colors.asp for a color chart.
***/
/*{{{*/
#mainMenu {position:relative;left:auto;width:auto;text-align:left;line-height:normal;padding 0em 1em 0em 1em;font-size:normal;}
#mainMenu br {display:none;}
#mainMenu {background:#336699;}
#mainMenu {padding:2px;}
#mainMenu .button, #mainMenu .tiddlyLink {padding-left:0.5em;padding-right:0.5em;color:white;font-size:115%;}

#displayArea {
	margin-top:0;margin-right:20em;margin-bottom:0;margin-left:1em;
	padding-top:.1em;padding-bottom:.1em;
}
/*}}}*/
|''Type:''|socialtext|
|''URL:''|https://saturn.ffzg.hr%2C%20saturn.ffzg.hr:443 |
|''Workspace:''|koha-cug|
|''WorkspaceList:''||
|''Description:''|Koha Croatian user group|
The TiddlySaver Java applet allows TiddlyWiki from a {{{file://}}} URL to save changes Safari, Opera and other browsers.

It is a small file named [["TiddlySaver.jar"|TiddlySaver.jar]] that must be placed in the same directory as your TiddlyWiki file. Before you can use it, you need to give it the necessary privileges by editting your {{{.java.policy}}} file.

For Windows, the file will be at {{{C:\Documents and Settings\your-user-name\.java.policy}}}. Add the following lines (substituting the directory of your TiddlyWiki file as appropriate):
{{{
grant codeBase "file:${user.home}/My Documents/tiddlywiki-folder/*" {
  permission java.io.FilePermission "${user.home}${/}My Documents${/}tiddlywiki-folder${/}*", "read,write";
};
}}}
On Mac OS X, the file is found at {{{/Users/your-user-name/.java.policy}}}:
{{{
grant codeBase "file:${user.home}/Documents/tiddlywiki-folder/*" {
  permission java.io.FilePermission "${user.home}${/}Documents${/}tiddlywiki-folder${/}*", "read,write";
};
}}}
It can be tricky creating files whose name starts with a period, so you can use this [[pre-built .java.policy file|.java.policy]]. The same file is suitable for Macs too, just edit it and delete the "My " bit, leaving just "Documents". Make sure you save it in the right place for each operating system!

If you have trouble setting up the permissions correctly, you can try granting broader permissions to the applet like this:

{{{
grant codeBase "file://localhost/home/users/Desktop/
TiddlySaver.jar"
 { permission java.security.AllPermission; };
}}}

Note that there is currently [[a bug|http://trac.tiddlywiki.org/ticket/172]] that prevents TiddlySaver from working if you have specified a backup directory in AdvancedOptions.
/***
|''Name:''|SocialtextLocaleOverrides|
|''Description:''|Text changes for Socialtext|
***/

//{{{
merge(config.views.wikified.tag,{
	labelNoTags: "No Tags",
	labelTags: "Tags"});

merge(config.commands.references,{
	text: "incoming links",
	tooltip: "Show tiddlers that link to this one",
	popupNone: "No incoming links"});
//}}}
/***
|''Name:''|SocialtextTweaksPlugin|
|''Description:''|Allows changes to be synchronised with a Socialtext server|
|''Source:''|http://stunplugged.tiddlywiki.com/#SocialtextTweaksPlugin|
|''Author:''|JeremyRuston (jeremy (at) osmosoft (dot) com)|
|''Version:''|1.0.2|
|''Date:''|Jun 15, 2006|
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|
|''License:''|[[BSD open source license]]|
|''~CoreVersion:''|2.2|

Make minor configuration tweaks specific to Socialtext Unplugged
***/

//{{{
// Ensure that the SocialtextTweaksPlugin is only installed once.
if(!version.extensions.SocialtextTweaksPlugin) {
version.extensions.SocialtextTweaksPlugin = {installed:true};
// Check version number of core code
if(version.major < 2 || (version.major == 2 && version.minor < 2))
	{alertAndThrow("SocialtextTweaksPlugin requires TiddlyWiki 2.2 or later.");}

merge(config.defaultCustomFields,{
	wikiformat:'socialtext',
	'server.host':'https://saturn.ffzg.hr%2C%20saturn.ffzg.hr:443'
});

config.options.chkSinglePageMode = true;
config.options.chkEnableAnimations = true;

} // end of "install only once"
//}}}
/***
|''Name:''|SocialtextFormatterPlugin|
|''Description:''|Allows Tiddlers to use [[Socialtext|http://www.socialtext.com/]] text formatting|
|''Author:''|Martin Budden (mjbudden (at) gmail (dot) com)|
|''Source:''|http://www.martinswiki.com/#SocialtextFormatterPlugin|
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/contributors/MartinBudden/formatters/SocialtextFormatterPlugin.js|
|''Version:''|0.9.4|
|''Date:''|Jan 21, 2007|
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''~CoreVersion:''|2.1.0|

This is the SocialtextFormatterPlugin, which allows you to insert Socialtext formated text into a TiddlyWiki.

The aim is not to fully emulate Socialtext, but to allow you to work with Socialtext content off-line and then resync the content with your Socialtext wiki later on, with the expectation that only minor edits will be required.

To use Socialtext format in a Tiddler, tag the Tiddler with SocialtextFormat or set the tiddler's {{{wikiformat}}} extended field to {{{socialtext}}}

Please report any defects you find at http://groups.google.co.uk/group/TiddlyWikiDev
***/

//{{{
// Ensure that the SocialtextFormatter Plugin is only installed once.
if(!version.extensions.SocialtextFormatterPlugin) {
version.extensions.SocialtextFormatterPlugin = {installed:true};

if(version.major < 2 || (version.major == 2 && version.minor < 1))
	{alertAndThrow('SocialtextFormatterPlugin requires TiddlyWiki 2.1 or later.');}

SocialtextFormatter = {}; // 'namespace' for local functions

wikify = function(source,output,highlightRegExp,tiddler)
{
	if(source && source != '') {
		var w = new Wikifier(source,getParser(tiddler),highlightRegExp,tiddler);
		var out = output;
		if(tiddler && (tiddler.isTagged(config.parsers.socialtextFormatter.formatTag) || (tiddler.fields.wikiformat==config.parsers.socialtextFormatter.format)) ) {
			var d1 = createTiddlyElement(output,'div','content-display-body','content-section-visible');
			var d2 = createTiddlyElement(d1,'div','wikipage');
			out = createTiddlyElement(d2,'div',null,'wiki');
		}
		var time1,time0 = new Date();
		w.subWikifyUnterm(out);
		if(tiddler && config.options.chkDisplayInstrumentation) {
			time1 = new Date();
			var t = tiddler ? tiddler.title : source.substr(0,10);
			displayMessage("Wikify '"+t+"' in " + (time1-time0) + " ms");
		}
	}
};

stDebug = function(out,str)
{
	createTiddlyText(out,str.replace(/\n/mg,'\\n').replace(/\r/mg,'RR'));
	createTiddlyElement(out,'br');
};

SocialtextFormatter.Tiddler_changed = Tiddler.prototype.changed;
Tiddler.prototype.changed = function()
{
	if((this.fields.wikiformat==config.parsers.socialtextFormatter.format) || this.isTagged(config.parsers.socialtextFormatter.formatTag)) {
		// update the links array, by checking for Socialtext format links
		this.links = [];
		var tiddlerLinkRegExp = /(?:\"(.*?)\" ?)?\[([^\]]*?)\]/mg;
		tiddlerLinkRegExp.lastIndex = 0;
		var match = tiddlerLinkRegExp.exec(this.text);
		while(match) {
			var link = match[2];
			this.links.pushUnique(link);
			match = tiddlerLinkRegExp.exec(this.text);
		}
	}/* else {
		return SocialtextFormatter.Tiddler_changed.apply(this,arguments);
	}*/
	this.linksUpdated = true;
};

SocialtextFormatter.wafl = function(w)
{
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var lm2 = lookaheadMatch[2];
		switch(lookaheadMatch[1]) {
		case 'image':
			var img = createTiddlyElement(w.output,'img');
			img.src = w.tiddler.title + '/' + lm2;
			createTiddlyText(img,lm2);
			break;
		case 'file':
			var s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			var a = createTiddlyElement(s,'a');
			a.href = w.tiddler.title + '/' + lm2;
			createTiddlyText(a,lm2);
			break;
		case 'link':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createTiddlyElement(s,'a');
			var t = w.tiddler ? w.tiddler.title + ':' : '';
			a.setAttribute('href','#' + t + lm2);
			a.title = 'section link';
			createTiddlyText(a,lm2);
			break;
		case 'weblog':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			var text = lm2;
			var link = 'Weblog: ' + lm2;
			createTiddlyText(createTiddlyLink(s,link,false,null,w.isStatic),text);
			break;
		case 'section':
			a = createTiddlyElement(w.output,'a');// drop anchor
			t = w.tiddler ? w.tiddler.title + ':' : '';
			a.setAttribute('name',t + lm2);
			break;
		case 'date':
			createTiddlyText(w.output,lm2);
			break;
		case 'user':
			var oldSource = w.source;
			w.source = lm2;
			w.nextMatch = 0;
			w.subWikifyUnterm(w.output);
			w.source = oldSource;
			break;
// Shortcut expansions - not strictly syntax
		case 'google':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createExternalLink(s,'http://www.google.com/search?q='+lm2);
			createTiddlyText(a,lm2);
			break;
		case 'fedex':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createExternalLink(s,'http://www.fedex.com/Tracking?tracknumbers='+lm2);
			createTiddlyText(a,lm2);
			break;
		case 'map':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createExternalLink(s,'http://maps.google.com/maps?q='+lm2);
			createTiddlyText(a,lm2);
			break;
		case 'wikipedia':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createExternalLink(s,'http://en.wikipedia.org/wiki/'+lm2);
			createTiddlyText(a,lm2);
			break;
		case 'rt':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createExternalLink(s,'http://rt.socialtext.net/Ticket/Display.html?id='+lm2);
			createTiddlyText(a,lm2);
			break;
		case 'stcal':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createExternalLink(s,'https://calendar.socialtext.net:445/view_t.php?timeb=1&id=3&date='+lm2);
			createTiddlyText(a,lm2);
			break;
		case 'svn':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createExternalLink(s,'https://repo.socialtext.net/listing.php?rev='+lm2+'sc=1');
			createTiddlyText(a,lm2);
			break;
		default:
			w.outputText(w.output,w.matchStart,w.nextMatch);
			return;
		}
		w.nextMatch = this.lookaheadRegExp.lastIndex;
	} else {
		w.outputText(w.output,w.matchStart,w.nextMatch);
	}
};

SocialtextFormatter.presence = function(w)
{
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var p = lookaheadMatch[1];
		var text = lookaheadMatch[2];
		var link;
		var src;
		if(p=='aim') {
			link = 'aim:goim?screenname=' + text + '&message=hello';
			src = 'http://big.oscar.aol.com/sleepleft?on_url=http://www.aim.com/remote/gr/MNB_online.gif&amp;off_url=http://www.aim.com/remote/gr/MNB_offline.gif';
		} else if(p=='yahoo'||p=='ymsgr') {
			link = 'ymsgr:sendIM?'+text;
			src = 'http://opi.yahoo.com/online?u=chrislondonbridge&f=.gif';
		} else if(p=='skype'||p=='callto') {
			link = 'callto:'+text;
			src = 'http://goodies.skype.com/graphics/skypeme_btn_small_green.gif';
		} else if(p=='asap') {
			link = 'http://asap2.convoq.com/AsapLinks/Meet.aspx?l='+text;
			src = 'http://asap2.convoq.com/AsapLinks/Presence.aspx?l='+text;
		}
		var s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
		var a = createExternalLink(s,link);
		var img = createTiddlyElement(a,'img');
		createTiddlyText(a,text);
		img.src = src;
		img.border='0';
		img.alt = '(' + lookaheadMatch[1] + ')';
		if(p=='aim') {
			img.width='11'; img.height='13';
		}
		w.nextMatch = this.lookaheadRegExp.lastIndex;
	}
};

config.formatterHelpers.singleCharFormat = function(w)
{
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[0].substr(lookaheadMatch[0].length-2,1) != ' ') {
		w.subWikifyTerm(createTiddlyElement(w.output,this.element),this.termRegExp);
	} else {
		w.outputText(w.output,w.matchStart,w.nextMatch);
	}
};

config.socialtext = {};
config.socialtext.formatters = [
{
	name: 'socialtextHeading',
	match: '^\\^{1,6} ?',
	termRegExp: /(\n+)/mg,
	handler: function(w)
	{
		var len = w.matchText.trim().length;
		var e = createTiddlyElement(w.output,'h' + len);
		var a = createTiddlyElement(e,'a');// drop anchor
		var t = w.tiddler ? w.tiddler.title + ':' : '';
		len = w.source.substr(w.nextMatch).indexOf('\n');
		a.setAttribute('name',t+w.source.substr(w.nextMatch,len));
		w.subWikifyTerm(e,this.termRegExp);
	}
},

{
	name: 'socialtextTable',
	match: '^\\|(?:(?:.|\n)*)\\|$',
	lookaheadRegExp: /^\|(?:(?:.|\n)*)\|$/mg,
	cellRegExp: /(?:\|(?:[^\|]*)\|)(\n|$)?/mg,
	cellTermRegExp: /((?:\x20*)\|)/mg,
	handler: function(w)
	{
		var table = createTiddlyElement(w.output,'table');
		var rowContainer = createTiddlyElement(table,'tbody');
		var prevColumns = [];
		w.nextMatch = w.matchStart;
		this.lookaheadRegExp.lastIndex = w.nextMatch;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {
			var r = this.rowHandler(w,createTiddlyElement(rowContainer,'tr'),prevColumns);
			if(!r) {
				w.nextMatch++;
				break;
			}
			this.lookaheadRegExp.lastIndex = w.nextMatch;
			lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		}
	},
	rowHandler: function(w,e,prevColumns)
	{
		this.cellRegExp.lastIndex = w.nextMatch;
		var cellMatch = this.cellRegExp.exec(w.source);
		while(cellMatch && cellMatch.index == w.nextMatch) {
			w.nextMatch++;
			var cell = createTiddlyElement(e,'td');
			w.subWikifyTerm(cell,this.cellTermRegExp);
			if(cellMatch[1]) {
				// End of row
				w.nextMatch = this.cellRegExp.lastIndex;
				return true;
			}
			// Cell
			w.nextMatch--;
			this.cellRegExp.lastIndex = w.nextMatch;
			cellMatch = this.cellRegExp.exec(w.source);
		}
		return false;
	}
},

{
	name: 'socialtextList',
	match: '^[\\*#]+ ',
	lookaheadRegExp: /^([\*#])+ /mg,
	termRegExp: /(\n+)/mg,
	handler: function(w)
	{
		var stack = [w.output];
		var currLevel = 0, currType = null;
		var itemType = 'li';
		w.nextMatch = w.matchStart;
		this.lookaheadRegExp.lastIndex = w.nextMatch;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {
			var listType = lookaheadMatch[1] == '*' ? 'ul' : 'ol';
			var listLevel = lookaheadMatch[0].length;
			w.nextMatch += listLevel;
			if(listLevel > currLevel) {
				for(var i=currLevel; i<listLevel; i++) {
					stack.push(createTiddlyElement(stack[stack.length-1],listType));
				}
			} else if(listLevel < currLevel) {
				for(i=currLevel; i>listLevel; i--) {
					stack.pop();
				}
			} else if(listLevel == currLevel && listType != currType) {
				stack.pop();
				stack.push(createTiddlyElement(stack[stack.length-1],listType));
			}
			currLevel = listLevel;
			currType = listType;
			var e = createTiddlyElement(stack[stack.length-1],itemType);
			w.subWikifyTerm(e,this.termRegExp);
			this.lookaheadRegExp.lastIndex = w.nextMatch;
			lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		}
	}
},

{
	name: 'socialtextQuoteByLine',
	match: '^>+',
	lookaheadRegExp: /^>+/mg,
	termRegExp: /(\n)/mg,
	element: 'blockquote',
	handler: function(w)
	{
		var stack = [w.output];
		var currLevel = 0;
		var newLevel = w.matchLength;
		var i;
		do {
			if(newLevel > currLevel) {
				for(i=currLevel; i<newLevel; i++) {
					stack.push(createTiddlyElement(stack[stack.length-1],this.element));
				}
			} else if(newLevel < currLevel) {
				for(i=currLevel; i>newLevel; i--) {
					stack.pop();
				}
			}
			currLevel = newLevel;
			w.subWikifyTerm(stack[stack.length-1],this.termRegExp);
			createTiddlyElement(stack[stack.length-1],'br');
			this.lookaheadRegExp.lastIndex = w.nextMatch;
			var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
			var matched = lookaheadMatch && lookaheadMatch.index == w.nextMatch;
			if(matched) {
				newLevel = lookaheadMatch[0].length;
				w.nextMatch += newLevel;
			}
		} while(matched);
	}
},

{
	name: 'socialtextRule',
	match: '^----+$\\n+',
	handler: function(w)
	{
		createTiddlyElement(w.output,'hr');
	}
},

{
	name: 'socialtextPreformatted',
	match: '^\\.pre\\s*\\n',
	lookaheadRegExp: /^.pre\s*\n((?:.|\n)*?)\n.pre\s*\n/mg,
	element: 'pre',
	handler: config.formatterHelpers.enclosedTextHelper
},

{
	name: 'socialtextHtml',
	match: '^\\.html',
	lookaheadRegExp: /\.html((?:.|\n)*?)\.html/mg,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			createTiddlyElement(w.output,'span').innerHTML = lookaheadMatch[1];
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
},

{
	name: 'macro',
	match: '<<',
	lookaheadRegExp: /<<([^>\s]+)(?:\s*)((?:[^>]|(?:>(?!>)))*)>>/mg,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[1]) {
			w.nextMatch = this.lookaheadRegExp.lastIndex;
			invokeMacro(w.output,lookaheadMatch[1],lookaheadMatch[2],w,w.tiddler);
		}
	}
},

{
	name: 'socialtextExplicitLink',
	match: '(?:".*?" ?)?\\[',
	lookaheadRegExp: /(?:\"(.*?)\" ?)?\[([^\]]*?)\]/mg,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var link = lookaheadMatch[2];
			var text = lookaheadMatch[1] ? lookaheadMatch[1] : link;
			createTiddlyText(createTiddlyLink(w.output,link,false,null,w.isStatic,w.tiddler),text);
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
},

{
	name: 'socialtextExternalLink',
	match: '(?:".*?" ?)?<[a-z]{2,8}:',
	lookaheadRegExp: /(?:\"(.*?)\" ?)?<([a-z]{2,8}:.*?)>/mg,
	imgRegExp: /\.(?:gif|ico|jpg|png)/g,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var link = lookaheadMatch[2];
			var text = lookaheadMatch[1] ? lookaheadMatch[1] : link;
			this.imgRegExp.lastIndex = 0;
			if(this.imgRegExp.exec(link)) {
				var img = createTiddlyElement(w.output,'img');
				if(lookaheadMatch[1]) {
					img.title = text;
				}
				img.alt = text;
				img.src = link;
			} else {
				createTiddlyText(createExternalLink(w.output,link),text);
			}
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
},

{
	name: 'socialtextUrlLink',
	match: config.textPrimitives.urlPattern,
	handler: function(w)
	{
		w.outputText(createExternalLink(w.output,w.matchText),w.matchStart,w.nextMatch);
	}
},

{
	name: 'socialtextBold',
	match: '\\*(?![\\s\\*])',
	lookaheadRegExp: /\*(?!\s)(?:.*?)(?!\s)\*(?=[$\s\|\._\-,])/mg,
	termRegExp: /((?!\s)\*(?=[$\s\|\.\-_,]))/mg,
	element: 'strong',
	handler: config.formatterHelpers.singleCharFormat
},

{
	name: 'socialtextItalic',
	match: '_(?![\\s_])',
	lookaheadRegExp: /_(?!\s)(?:.*?)(?!\s)_(?=[$\s\|\.\*\-,])/mg,
	termRegExp: /((?!\s)_(?=[$\s\|\.\*\-,]))/mg,
	element: 'em',
	handler: config.formatterHelpers.singleCharFormat
},

{
	name: 'socialtextStrike',
	match: '-(?![\\s\\-])',
	lookaheadRegExp: /-(?!\s)(?:.*?)(?!\s)-(?=[$\s\|\.\*_,])/mg,
	termRegExp: /((?!\s)-(?=[$\s\|\.\*_,]))/mg,
	element: 'del',
	handler: config.formatterHelpers.singleCharFormat
},

{
	name: 'socialtextMonoSpaced',
	match: '`(?![\\s`])',
	lookaheadRegExp: /`(?!\s)(?:.*?)(?!\s)`(?=[$\s\.\*\-_,])/mg,
	termRegExp: /((?!\s)`(?=[$\s\.\*\-_,]))/mg,
	element: 'tt',
	handler: config.formatterHelpers.singleCharFormat
},

{
	name: 'socialtextParagraph',
	match: '\\n{2,}',
	handler: function(w)
	{
		createTiddlyElement(w.output,'p');
	}
},

{
	name: 'socialtextLineBreak',
	match: '\\n',
	handler: function(w)
	{
		createTiddlyElement(w.output,'br');
	}
},

{
	name: 'socialtextNoWiki',
	match: '\\{\\{',
	lookaheadRegExp: /\{\{((?:.|\n)*?)\}\}/mg,
	element: 'span',
	handler: config.formatterHelpers.enclosedTextHelper
},

{
	name: 'socialtextTrademark',
	match: '\\{tm\\}',
	handler: function(w)
	{
		createTiddlyElement(w.output,'span').innerHTML = '&trade;';
	}
},

{
	name: 'socialtextWafl',
	match: '\\{(?:[a-z]{2,16}): ?.*?\\}',
	lookaheadRegExp: /\{([a-z]{2,16}): ?(.*?)\}/mg,
	handler: SocialtextFormatter.wafl
},

{
	name: 'socialtextPresence',
	match: '(?:aim|yahoo|ymsgr|skype|callto|asap):\\w+',
	lookaheadRegExp: /(aim|yahoo|ymsgr|skype|callto|asap):(\w+)/mg,
	handler: SocialtextFormatter.presence
},

{
	name: 'socialtextMailTo',
	match: '[\\w\.]+@[\\w]+\.[\\w\.]+',
	lookaheadRegExp: /([\w\.]+@[\w]+\.[\w\.]+)/mg,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var text = lookaheadMatch[1];
			createTiddlyText(createExternalLink(w.output,'mailto:'+text),text);
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
},

{
	name: 'socialtextHtmlEntitiesEncoding',
	match: '&#?[a-zA-Z0-9]{2,8};',
	handler: function(w)
	{
		createTiddlyElement(w.output,'span').innerHTML = w.matchText;
	}
}
];

config.parsers.socialtextFormatter = new Formatter(config.socialtext.formatters);
config.parsers.socialtextFormatter.format = 'socialtext';
config.parsers.socialtextFormatter.formatTag = 'SocialtextFormat';

} // end of 'install only once'
//}}}
/***
|''Name:''|SocialtextAdaptorPlugin|
|''Description:''|Adaptor for moving and converting data to and from Socialtext Wikis|
|''Author:''|Martin Budden (mjbudden (at) gmail (dot) com) and JeremyRuston (jeremy (at) osmosoft (dot) com)|
|''Source:''|http://www.martinswiki.com/#SocialtextAdaptorPlugin|
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/contributors/MartinBudden/adaptors/SocialtextAdaptorPlugin.js|
|''Version:''|0.5.1|
|''Date:''|Feb 25, 2007|
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''~CoreVersion:''|2.2.0|

Socialtext REST documentation is at:
http://www.eu.socialtext.net/st-rest-docs/index.cgi?socialtext_rest_documentation

***/

//{{{
if(!version.extensions.SocialtextAdaptorPlugin) {
version.extensions.SocialtextAdaptorPlugin = {installed:true};

function SocialtextAdaptor()
{
	this.host = null;
	this.workspace = null;
	return this;
}

SocialtextAdaptor.mimeType = 'text/x.socialtext-wiki';
SocialtextAdaptor.serverType = 'socialtext';
SocialtextAdaptor.serverParsingErrorMessage = "Error parsing result from server";
SocialtextAdaptor.errorInFunctionMessage = "Error in function SocialtextAdaptor.%0";

SocialtextAdaptor.prototype.setContext = function(context,userParams,callback)
{
	if(!context) context = {};
	context.userParams = userParams;
	if(callback) context.callback = callback;
	context.adaptor = this;
	if(!context.host)
		context.host = this.host;
	if(!context.workspace && this.workspace)
		context.workspace = this.workspace;
	return context;
};

SocialtextAdaptor.doHttpGET = function(uri,callback,params,headers,data,contentType,username,password)
{
	return doHttp('GET',uri,data,contentType,username,password,callback,params,headers);
};

SocialtextAdaptor.doHttpPOST = function(uri,callback,params,headers,data,contentType,username,password)
{
	return doHttp('POST',uri,data,contentType,username,password,callback,params,headers);
};

SocialtextAdaptor.fullHostName = function(host)
{
	if(!host)
		return '';
	if(!host.match(/:\/\//))
		host = 'http://' + host;
	if(host.substr(host.length-1) != '/')
		host = host + '/';
	return host;
};

SocialtextAdaptor.minHostName = function(host)
{
	return host ? host.replace(/^http:\/\//,'').replace(/\/$/,'') : '';
};

// Convert a page title to the normalized form used in uris
SocialtextAdaptor.normalizedTitle = function(title)
{
	var n = title.toLowerCase();
	n = n.replace(/\s/g,'_').replace(/\//g,'_').replace(/\./g,'_').replace(/:/g,'').replace(/\?/g,'');
	if(n.charAt(0)=='_')
		n = n.substr(1);
	return String(n);
};

// Convert a Socialtext date in YYYY-MM-DD hh:mm format into a JavaScript Date object
SocialtextAdaptor.dateFromEditTime = function(editTime)
{
	var dt = editTime;
	return new Date(Date.UTC(dt.substr(0,4),dt.substr(5,2)-1,dt.substr(8,2),dt.substr(11,2),dt.substr(14,2)));
};

SocialtextAdaptor.prototype.openHost = function(host,context,userParams,callback)
{
	this.host = SocialtextAdaptor.fullHostName(host);
	context = this.setContext(context,userParams,callback);
	if(context.callback) {
		context.status = true;
		window.setTimeout(function() {callback(context,userParams);},0);
	}
	return true;
};

SocialtextAdaptor.prototype.openWorkspace = function(workspace,context,userParams,callback)
{
	this.workspace = workspace;
	context = this.setContext(context,userParams,callback);
	if(context.callback) {
		context.status = true;
		window.setTimeout(function() {callback(context,userParams);},0);
	}
	return true;
};


SocialtextAdaptor.prototype.getWorkspaceList = function(context,userParams,callback)
{
	context = this.setContext(context,userParams,callback);
	var uriTemplate = '%0data/workspaces';
	var uri = uriTemplate.format([context.host]);
	var req = SocialtextAdaptor.doHttpGET(uri,SocialtextAdaptor.getWorkspaceListCallback,context,{'accept':'application/json'});
	return typeof req == 'string' ? req : true;
};

SocialtextAdaptor.getWorkspaceListCallback = function(status,context,responseText,uri,xhr)
{
	context.status = false;
	context.statusText = SocialtextAdaptor.errorInFunctionMessage.format(['getWorkspaceListCallback']);
	if(status) {
		try {
			eval('var info=' + responseText);
		} catch (ex) {
			context.statusText = exceptionText(ex,SocialtextAdaptor.serverParsingErrorMessage);
			if(context.callback)
				context.callback(context,context.userParams);
			return;
		}
		var list = [];
		for(var i=0; i<info.length; i++) {
			var item = {
				title:info[i].title,
				name:info[i].name,
				modified:SocialtextAdaptor.dateFromEditTime(info[i].modified_time)
				};
			list.push(item);
		}
		context.workspaces = list;
		context.status = true;
	} else {
		context.statusText = xhr.statusText;
	}
	if(context.callback)
		context.callback(context,context.userParams);
};

SocialtextAdaptor.prototype.getTiddlerList = function(context,userParams,callback)
{
	context = this.setContext(context,userParams,callback);
	var uriTemplate = '%0data/workspaces/%1/pages?order=newest';//!! ? or ;
	var uri = uriTemplate.format([context.host,context.workspace]);
	var req = SocialtextAdaptor.doHttpGET(uri,SocialtextAdaptor.getTiddlerListCallback,context,{'accept':'application/json'});
	return typeof req == 'string' ? req : true;
};


SocialtextAdaptor.getTiddlerListCallback = function(status,context,responseText,uri,xhr)
{
	context.status = false;
	context.statusText = SocialtextAdaptor.errorInFunctionMessage.format(['getTiddlerListCallback']);
	if(status) {
		try {
			eval('var info=' + responseText);
		} catch (ex) {
			context.statusText = exceptionText(ex,SocialtextAdaptor.serverParsingErrorMessage);
			if(context.callback)
				context.callback(context,context.userParams);
			return;
		}
		var list = [];
		for(var i=0; i<info.length; i++) {
			var tiddler = new Tiddler(info[i].name);
			tiddler.modified = SocialtextAdaptor.dateFromEditTime(info[i].last_edit_time);
			tiddler.modifier = info[i].last_editor;
			tiddler.tags = info[i].tags;
			tiddler.fields['server.page.id'] = info[i].page_id;
			tiddler.fields['server.page.name'] = info[i].name;
			tiddler.fields['server.page.revision'] = String(info[i].revision_id);
			list.push(tiddler);
		}
		context.tiddlers = list;
		context.status = true;
	} else {
		context.statusText = xhr.statusText;
	}
	if(context.callback)
		context.callback(context,context.userParams);
};

SocialtextAdaptor.prototype.generateTiddlerInfo = function(tiddler)
{
	var info = {};
	var host = this && this.host ? this.host : SocialtextAdaptor.fullHostName(tiddler.fields['server.host']);
	var workspace = this && this.workspace ? this.workspace : tiddler.fields['server.workspace'];
	uriTemplate = '%0%1/index.cgi?%2';
	info.uri = uriTemplate.format([host,workspace,SocialtextAdaptor.normalizedTitle(tiddler.title)]);
	return info;
};

SocialtextAdaptor.prototype.getTiddler = function(title,context,userParams,callback)
{
	return this.getTiddlerRevision(title,null,context,userParams,callback);
};

SocialtextAdaptor.prototype.getTiddlerRevision = function(title,revision,context,userParams,callback)
{
	context = this.setContext(context,userParams,callback);

	// request the page in json format to get the page attributes
	if(revision) {
		var uriTemplate = '%0data/workspaces/%1/pages/%2/revisions/%3';
		context.revision = revision;
	} else {
		uriTemplate = '%0data/workspaces/%1/pages/%2';
		context.revision = null;
	}
	uri = uriTemplate.format([context.host,context.workspace,SocialtextAdaptor.normalizedTitle(title),revision]);

	context.tiddler = new Tiddler(title);
	context.tiddler.fields.wikiformat = 'socialtext';
	context.tiddler.fields['server.host'] = SocialtextAdaptor.minHostName(context.host);
	context.tiddler.fields['server.workspace'] = context.workspace;
	var req = SocialtextAdaptor.doHttpGET(uri,SocialtextAdaptor.getTiddlerCallback,context,{'accept':'application/json'});
	return typeof req == 'string' ? req : true;
};


SocialtextAdaptor.getTiddlerCallback = function(status,context,responseText,uri,xhr)
{
	context.status = false;
	context.statusText = SocialtextAdaptor.errorInFunctionMessage.format(['getTiddlerCallback']);
	if(status) {
		try {
			eval('var info=' + responseText);
			context.tiddler.tags = info.tags;
			context.tiddler.fields['server.page.id'] = info.page_id;
			context.tiddler.fields['server.page.name'] = info.name;
			context.tiddler.fields['server.page.revision'] = String(info.revision_id);
			context.tiddler.modifier = info.last_editor;
			context.tiddler.modified = SocialtextAdaptor.dateFromEditTime(info.last_edit_time);
		} catch (ex) {
			context.statusText = exceptionText(ex,SocialtextAdaptor.serverParsingErrorMessage);
			if(context.callback)
				context.callback(context,context.userParams);
			return;
		}
		context.status = true;
	} else {
		context.statusText = xhr.statusText;
		if(context.callback)
			context.callback(context,context.userParams);
		return;
	}
	var uriTemplate = context.revision ? '%0data/workspaces/%1/pages/%2/revisions/%3' : '%0data/workspaces/%1/pages/%2';
	var host = SocialtextAdaptor.fullHostName(context.tiddler.fields['server.host']);
	var workspace = context.workspace ? context.workspace : context.tiddler.fields['server.workspace'];
	uri = uriTemplate.format([host,workspace,SocialtextAdaptor.normalizedTitle(context.tiddler.title),context.revision]);
	var req = SocialtextAdaptor.doHttpGET(uri,SocialtextAdaptor.getTiddlerCallback2,context,{'accept':SocialtextAdaptor.mimeType});
};

SocialtextAdaptor.getTiddlerCallback2 = function(status,context,responseText,uri,xhr)
{
	context.tiddler.text = responseText;
	if(status) {
		context.status = true;
	} else {
		context.status = false;
		context.statusText = xhr.statusText;
	}
	if(context.callback)
		context.callback(context,context.userParams);
};

SocialtextAdaptor.prototype.getTiddlerRevisionList = function(title,limit,context,userParams,callback)
{
	context = this.setContext(context,userParams,callback);

	var uriTemplate = '%0data/workspaces/%1/pages/%2/revisions?accept=application/json';
	if(!limit)
		limit = 5;
	var uri = uriTemplate.format([context.host,context.workspace,SocialtextAdaptor.normalizedTitle(title),limit]);

	var req = SocialtextAdaptor.doHttpGET(uri,SocialtextAdaptor.getTiddlerRevisionListCallback,context);
	return typeof req == 'string' ? req : true;
};

SocialtextAdaptor.getTiddlerRevisionListCallback = function(status,context,responseText,uri,xhr)
{
	context.status = false;
	if(status) {
		var content = null;
		try {
			eval('var info=' + responseText);
		} catch (ex) {
			context.statusText = exceptionText(ex,SocialtextAdaptor.serverParsingErrorMessage);
			if(context.callback)
				context.callback(context,context.userParams);
			return;
		}
		list = [];
		for(var i=0; i<info.length; i++) {
			var tiddler = new Tiddler(info[i].name);
			tiddler.modified = SocialtextAdaptor.dateFromEditTime(info[i].last_edit_time);
			tiddler.modifier = info[i].last_editor;
			tiddler.tags = info[i].tags;
			tiddler.fields['server.page.id'] = info[i].page_id;
			tiddler.fields['server.page.name'] = info[i].name;
			tiddler.fields['server.page.revision'] = info[i].revision_id;
			list.push(tiddler);
		}
		var sortField = 'server.page.revision';
		list.sort(function(a,b) {return a.fields[sortField] < b.fields[sortField] ? +1 : (a.fields[sortField] == b.fields[sortField] ? 0 : -1);});
		context.revisions = list;
		context.status = true;
	} else {
		context.statusText = xhr.statusText;
	}
	if(context.callback)
		context.callback(context,context.userParams);
};

SocialtextAdaptor.prototype.putTiddler = function(tiddler,context,userParams,callback)
{
	context = this.setContext(context,userParams,callback);
	context.tiddler = tiddler;
	context.title = tiddler.title;
	var uriTemplate = '%0data/workspaces/%1/pages/%2';
	var host = context.host ? context.host : SocialtextAdaptor.fullHostName(tiddler.fields['server.host']);
	var workspace = context.workspace ? context.workspace : tiddler.fields['server.workspace'];
	var uri = uriTemplate.format([host,workspace,tiddler.title,tiddler.text]);
	//var req = doHttp('POST',uri,tiddler.text,SocialtextAdaptor.mimeType,null,null,SocialtextAdaptor.putTiddlerCallback,context,{"X-Http-Method": "PUT"});
	var req = SocialtextAdaptor.doHttpPOST(uri,SocialtextAdaptor.putTiddlerCallback,context,{"X-Http-Method": "PUT"},tiddler.text,SocialtextAdaptor.mimeType);
	return typeof req == 'string' ? req : true;
};

SocialtextAdaptor.putTiddlerCallback = function(status,context,responseText,uri,xhr)
{
	if(status) {
		context.status = true;
	} else {
		context.status = false;
		context.statusText = xhr.statusText;
	}
	if(context.callback)
		context.callback(context,context.userParams);
};

SocialtextAdaptor.prototype.close = function()
{
	return true;
};

config.adaptors[SocialtextAdaptor.serverType] = SocialtextAdaptor;
} //# end of 'install only once'
//}}}
/***
SocialtextStyleOverrides
***/

/*{{{*/
.headerShadow {padding: 2em 0em .5em 1em;}
.headerForeground {padding: 2em 0em .5em 1em;}

#st-page-wiki-title {
	font-size: 80%;
}
.subtitle {
	font-style: italic;
	font-size 80%;
}

/* from #st-tags */
.tagged {
	border-color: #bbeebb;
	background-color: #f4fff4;
}

.tagged .listTitle {
	color: #595;
	font-weight: bold;
}

.tagged .button {
	color: #000;
}

.selected .tagged {
	background-color: ColorPalette::TertiaryLight;
	border: 1px solid ColorPalette::TertiaryMid;
}

/* from #st-incoming-links */
.tagging {
	border-color: #ebb;
	background-color: #fff4f4;
}

.tagging .listTitle {
	color: #b78;
	font-weight: bold;
}

.tagging .button {
	color: #999;
}

.selected .tagging {
	background-color: ColorPalette::TertiaryLight;
	border: 1px solid ColorPalette::TertiaryMid;
}

.tiddler {/* Tiddler body */
	border:1px solid #ccc;
	margin:0.5em;
	background:#fff;
	padding:0.5em;
}

.viewer blockquote {border-left: 0px solid}

.tiddlyLinkNonExisting {
	font-style: italic;
	border-bottom: 1px dashed;
}

.editor input, .editor textarea {
	background: #ffd;
	border-style: solid;
	border-color: #888 #ccc #ccc #888;
	border-width: 2px;
}

.tabContents {white-space: nowrap;}

#displayArea {margin: 1em 20em 0em 14em;}

#sidebar {
	position: absolute;
	right: 3px;
	width: 21em;
	font-size: .9em;
}

#sidebarOptions .button {
	border-color: #eee;
}

#sidebarTabs .tabContents {
	width: 20em;
	overflow: hidden;
}

.viewer tt {
	font-size: 1.2em;
	line-height: 1.4em;
}

ul {list-style-type: square;}
ul ul {list-style-type: circle;}

ol {list-style-type: decimal;}
ol ol {list-style-type: decimal;}
ol ol ol {list-style-type: decimal;}
ol ol ol ol {list-style-type: decimal;}
ol ol ol ol ol {list-style-type: decimal;}
ol ol ol ol ol ol {list-style-type: decimal;}

/*}}}*/
/***
SocialtextScreenStyle
http://www.eu.socialtext.net/static/2.0.0.1/css/st/screen.css
***/

/*{{{*/
body {
	font-family: Arial, sans-serif;
	color: #000;
	background: #eee;
	margin: 0;
}

/* Wiki Navigation */

.st-wiki-nav {
	clear: both;
	margin-left: 10px;
	margin-right: 10px;
}
.st-wiki-nav-content {
	background: url('../../images/st/wiki-nav/solid.gif') repeat-x left bottom;
	margin-left: 24px;
	margin-right: 24px;
	padding-top: 3px;
	min-height: 24px;
}
* html .st-wiki-nav-content {
	padding-bottom: 3px;
	height: 24px;
}

.st-wiki-nav-right {
	background: url('../../images/st/wiki-nav/right-round.gif') no-repeat bottom right;
}

.st-wiki-nav-left {
	background: url('../../images/st/wiki-nav/left-round.gif') no-repeat bottom left;
}

#st-home {
	float: left;
	margin-right: 60px;
	padding-top: 2px;
}

#st-home-link {
	color: white;
	text-decoration: none;
	font-weight: bold;
	font-family: Helvetica, sans-serif;
	font-size: 90%;
}

#st-editing-prefix-container {
	border-collapse: collapse;
	width: 100%;
	padding: 0px;
	margin: 0px;
	margin-bottom: -20px;
}

#st-editing-prefix-container tr td {
	margin: 0px;
	padding: 0px;
}

#st-editing-title {
	color: black;
	background-color: white;
	text-decoration: none;
	font-weight: bold;
	font-family: Helvetica, sans-serif;
	font-size: 90%;
	margin-bottom: 0.4em;
}

#st-wiki-title-invite {
	font-size: 50%;
	font-family: Helvetica, sans-serif;
}

#st-wiki-title-central-page-link {
	font-size: 50%;
	font-family: Helvetica, sans-serif;
}

#st-wiki-title-invite a {
	color: #00f;
}

#st-wiki-logo {
	text-align: center;
	clear: both;
}

#st-wiki-logo-image {
}

.st-wiki-nav-actions {
	float: right;
	color: black;
	font-size: 75%;
	padding-top: 3px;
}

.st-wiki-nav-actions a {
	padding: 2px;
	color: white;
	text-decoration: none;
	font-family: Helvetica, sans-serif;
}

/* Wiki Subnav */

#st-wiki-subnav {
	margin-top: 2px;
	font-size: 70%;
	font-weight: bold;
	font-family: Helvetica, sans-serif;
	color: #888;
}

#st-wiki-subnav a {
	padding: 2px;
	color: #008;
	text-decoration: none;
}

#st-wiki-subnav-right {
	float: right;
	margin-right: 6em;
}

#st-wiki-subnav-left {
	float: left;
	margin-left: 6em;
}
* html #st-wiki-subnav-left {
	margin-left: 3em;
}

/* Wiki Navigation Search Bar */

#st-search-form {
	margin: 0;
	padding: 0;
	padding-top: 1px;
}

#st-search-form .button-table {
	float: left;
	font-size: 79%;
	font-weight: bold;
	margin-left: 5px;
	margin-top: 1px;
}

#st-search-form #st-search-term {
	float: left;
	font-size: 60%;
}

/* Content Outline */

#st-content-border, #st-edit-border {
	position: relative;
	clear: both;
	margin-left: 3px;
	margin-right: 2px;
	margin-bottom: 0px;
	margin-top: 0px;
	border-bottom: 1px solid #eee;
}

#st-content-border-left, #st-edit-border-left {
	background: url('../../images/st/page-shadow/left.gif') left top repeat-y;
	position: relative;
}

#st-content-border-right, #st-edit-border-right {
	background: url('../../images/st/page-shadow/right.gif') right top repeat-y;
	position: relative;
}

#st-content-border-top, #st-edit-border-top {
	position: relative;
	background: url('../../images/st/page-shadow/top.gif') left top repeat-x;
}

#st-content-border-bottom, #st-edit-border-bottom {
	background: url('../../images/st/page-shadow/bottom.gif') left bottom repeat-x;
	position: relative;
}

#st-content-border-left-top, #st-edit-border-left-top {
	background: url('../../images/st/page-shadow/left-top.gif') left top no-repeat;
	position: relative;
}
#st-content-border-right-top, #st-edit-border-right-top {
	background: url('../../images/st/page-shadow/right-top.gif') right top no-repeat;
	position: relative;
}

#st-content-border-left-bottom, #st-edit-border-left-bottom {
	background: url('../../images/st/page-shadow/left-bottom.gif') left bottom no-repeat;
	position: relative;
}

#st-content-border-right-bottom, #st-edit-border-right-bottom {
	background: url('../../images/st/page-shadow/right-bottom.gif') right bottom no-repeat;
	padding-top: 5px;
	padding-bottom: 9px;
	position: relative;
}

* html #st-content-border-right-bottom, * html #st-edit-border-right-bottom {
	padding-top: 4px;
	padding-left: 7px;
	padding-right: 8px;
	position: relative;
}

.st-content-width-controller {
	width: 100%;
	position: relative;
	border-collapse: collapse;
}
.st-content-width-controller td {
	vertical-align: top;
}
.st-content {
	position: relative;
	background-color: white;
	margin-top: 0px;
	margin-left: 7px;
	margin-right: 8px;
	margin-bottom: -1px;
	border-left: 1px dotted #80a9f3;
	border-right: 1px dotted #80a9f3;
	border: 1px solid #80a9f3;
	padding: 6px 12px 12px 12px;
}
* html .st-content {
	margin-top: 0px;
	margin-left: 0px;
	margin-right: 0px;
}

/* This textarea is only for Safari. However, if we use display:none; here Safari ignores the .value operation in JS */
#st-raw-wikitext-textarea {
	width:1px;
	height:1px;
	margin:0;
	padding:0;
}

/* Action Buttons */
.button-table, .button-table tr td {
	border-collapse: collapse;
	margin: 0;
	padding: 0;
}
.button-rounded {
	background: url('../../images/st/grey-button/left-top-rounded.png') top left no-repeat;
	margin: 0;
}
.button-rounded-right-top {
	background: url('../../images/st/grey-button/right-top-rounded.png') top right no-repeat;
	margin: 0;
}
.button-rounded-left-bottom {
	background: url('../../images/st/grey-button/left-bottom-rounded.png') bottom left no-repeat;
	margin: 0;
}
.button-rounded-right-bottom {
	background: url('../../images/st/grey-button/right-bottom-rounded.png') bottom right no-repeat;
	margin: 0;
}
.button-straight {
	background: url('../../images/st/grey-button/left-top-straight.png') top left no-repeat;
	margin: 0;
}
.button-straight-right-top {
	background: url('../../images/st/grey-button/right-top-straight.png') top right no-repeat;
	margin: 0;
}
.button-straight-left-bottom {
	background: url('../../images/st/grey-button/left-bottom-straight.png') bottom left no-repeat;
	margin: 0;
}
.button-straight-right-bottom {
	background: url('../../images/st/grey-button/right-bottom-straight.png') bottom right no-repeat;
	margin: 0;
}
.button-content {
	font-size: 90%;
}
.button-content a {
	display: block;
	padding: 2px;
	padding-left: 10px;
	padding-right: 10px;
	font-family: Helvetica, Verdana, sans-serif;
	font-weight: bold;
	text-decoration: none;
	color: black;
}

.button-content input.submit {
	border: 0px;
	padding: 2px;
	padding-left: 10px;
	padding-right: 10px;
	font-family: Helvetica, Verdana, sans-serif;
	font-weight: bold;
	text-decoration: none;
	color: black;
	background-color: transparent;
}

/* Personal Homepage */

#st-homepage {
	background: white url('../../images/st/homepage/blue-fade.gif') top left no-repeat;
}

#st-homepage-layout {
	margin-top: 15px;
	clear: both;
	width: 100%;
	border-collapse: collapse;
}

#st-homepage-layout tr td.st-homepage-layout-cell {
	padding: 5px;
	vertical-align: top;
}

#st-homepage-layout-dashboard {
	width: 50%
}

#st-homepage-layout-notes {
	width: 50%;
}

#st-homepage-notes, #st-homepage-dashboard {
	text-align: left;
	width: 95%;
}

#st-user-greeting, #st-wiki-title {
	font-family: Helvetica, Verdana, sans-serif;
	font-size: 150%;
}
#st-wiki-title {
	margin-left: 5px;
}

#st-user-greeting {
	position: relative;
	text-align: right;
	float: right;
}

#st-group-notes-content, #st-personal-notes-content {
}

.st-homepage-section {
	margin-bottom: 15px;
}

#st-homepage-notes .st-homepage-section {
	background-color: white;
	border: 1px solid #aaa;
	padding: 15px;
}

.st-homepage-section-title {
	font-size: 110%;
	font-family: Helvetica, Verdana, sans-serif;
}

#st-homepage-notes .st-homepage-section-title {
	color: #aaa;
	text-decoration: underline;
}

.st-homepage-notes-edit-link {
	background: url('../../images/st/homepage/edit-icon.gif') no-repeat left top;
	display: block;
	text-indent: -2000px;
	height: 13px;
	width: 36px;
	text-decoration: none;
	padding:0;
}
* html .st-homepage-notes-edit-link {
	border:1px solid white;
}

.st-homepage-notes-edit {
	font-family: Verdana, sans-serif;
	font-size: 65%;
	float: right;
}

.st-homepage-notes-content {
	font-size: 85%;
	margin-top: 10px;
	padding-top: 0px;
	padding-bottom: 0px;
	font-family: Verdana, Helvetica, sans-serif;
}

#st-dyk {
	border-color: #cca !important;
	background-color: #ffe !important;
}

#st-dyk-title {
	color: #e4a020 !important;
	text-decoration: none !important;
}


/* Homepage Simple List */

#st-whats-new-title-link {
	background: url('../../images/st/homepage/icon-28-pages.gif') no-repeat left top;
}
#st-watchlist-title-link {
	background: url('../../images/st/homepage/icon-28-star.gif') no-repeat left top;
}
#st-wikis-title-link {
	background: url('../../images/st/homepage/icon-28-group.gif') no-repeat left top;
}
.st-homepage-simplelist-title-link {
	display: block;
	padding-left: 32px;
	min-height: 32px;
}
* html .st-homepage-simplelist-title-link {
	height: 32px;
}

.st-homepage-simplelist-title {
}

.st-homepage-simplelist-table {
	margin-left: 25px;
	border: 1px dashed #ddd;
	border-collapse: collapse;
	font-family: Verdana, Helvetica, sans-serif;
	font-size: 80%;
	width: 95%;
}

.st-homepage-simplelist-table td {
	padding: 2px;
}

.st-homepage-simplelist-table tr.st-homepage-simplelist-row-odd {
	background-color: #f3f7f7;
}

.st-homepage-simplelist-table tr.st-homepage-simplelist-row-even {
	background-color: white;
}

.st-homepage-simplelist-table a {
	color: #4f55dd;
	text-decoration: none;
}

.st-homepage-simplelist-table a:visited {
	color: #551a8b;
}

.st-homepage-simplelist-subleft {
	font-size: 80%;
	margin-left: 1em;
	color: #666;
}

.st-homepage-simplelist-right {
	width: 20%;
}

.st-homepage-simplelist-subright {
	font-size: 80%;
	color: #666;
}

.st-homepage-simplelist {
}

.st-homepage-simplelist-header {
	min-height: 35px;
}

.st-homepage-simplelist-header .button-table {
	float: right;
	margin-right: 15px;
	font-size: 95%;
}

.st-homepage-simplelist-header .button-table .button-content {
	padding: 1px;
}

.st-homepage-whatsnew-author, .st-homepage-whatsnew-date {
	color: #555;
}
.st-homepage-whatsnew-attribution {
	padding-left: 1em;
	font-size: 80%;
	color: #aaa;
}

/* Homepage Wikis List */

#st-wikis-title {
}

/* Data and Templates */

.st-jst-template, .st-json {
	display: none;
}

/* Page Sidebox Common Styles */

#st-page-boxes-toggle {
	position: relative;
	float: right;
	text-align: right;
	font-family: Verdana, Arial, sans-serif;
	font-weight: bold;
	font-size: 80%;
	margin-bottom: 0.7em;
}

#st-page-boxes-toggle-link {
	text-decoration: none;
}

#st-page-boxes-underlay {
	float: right;
	margin-top: -10px;
	margin-right: 10px;
	background: white;
	z-index: 198;
	clear: both;
	margin-left: 15px;
}
* html #st-page-boxes-underlay {
	margin-right: 4px;
}
#st-page-boxes {
	background: inherit;
	position: absolute;
	right: 23px;
	z-index: 199;
	margin-top: 15px;
	margin-left: 20px;
}
#st-page-boxes, #st-page-boxes-underlay {
	width: 225px;
	/* padding-left: 15px; */ /* Gives the white border effect, cwest dislikes it. */
}

.st-page-box {
	border: 1px solid black;
	padding: 5px;
	font-family: Verdana, Helvetica, sans-serif;
	font-size: 80%;
	margin-top: 15px;
}

.st-page-box-title {
	font-family: Helvetica, Verdana, sans-serif;
	font-weight: bold;
	margin-bottom: 10px;
}

.st-page-box-listing {
	margin: 0;
	padding: 0;
}

.st-page-box-listing-entry {
	display: block;
}

.st-page-boxes-nobacklinks {
	font-family: Verdana, Helvetica, sans-serif;
	font-size: 90%;
	color: #888;
}

.st-page-box-first {
	margin-top: 0px;
}

/* Page Display */

#st-page-content {
	clear: left;
	margin-top: 6px;
	margin-bottom: 0;
	padding-bottom: 0;
}

#st-page-content, #st-page-content td {
	font-family: Verdana, Helvetica, sans-serif;
	font-size: 90%;
}

#st-page-wiki-title {
	font-family: Helvetica, Verdana, sans-serif;
	font-size: 65%;
	font-weight: bold;
	color: #aaa;
	margin-bottom: 0.2em;
	margin-top: 0.1em;
	padding-top: 0;
}

#wiki {
	margin: 0;
	padding: 0;
}

#st-page-title {
}

#st-page-titletext, .st-page-title {
	font-family: Helvetica, Verdana, sans-serif;
	font-size: 150%;
	font-weight: bold;
	color: #888;
	border-bottom: 1px solid #888;
}

#st-newpage-pagename-edit {
	font-family: inherit;
	font-size: inherit;
	font-weight: inherit;
	color: #000;
	border: 1px solid black;
	padding-left: 0.3em;
	background-color: #ffd;
}

#st-page-details {
	font-style: italic;
	font-size: 75%;
	font-family: Georgia, serif;
	margin: 6px 10px 0 10px;
}

#st-page-details-feed-icon {
	vertical-align: middle;
	border: none;
}

#st-page-stats {
	float: right;
	vertical-align: middle;
}

#st-attribution {
	float: left;
	margin-bottom: 10px;
}

#st-page-editing-wysiwyg {
	background: #ffd;
	border-style: solid;
	border-color: #888 #ccc #ccc #888;
	border-width: 2px;
	width: 100%;
}

#st-page-editing-toolbar {
	margin-left: -6px;
	overflow: hidden;
	float: left;
	height: 25px;
}

#wikiwyg_wikitext_textarea {
	margin-top: 4px;
	background: #ffd;
	border-style: solid;
	border-color: #888 #ccc #ccc #888;
	border-width: 2px;
	width: 100%;
	font-family: monospace;
}

#st-page-maincontent {
}

#st-page-editing, #wikiwyg_wikitext_textarea {
}

#st-page-editing-pagebody-decoy, #st-page-editing-wysiwyg {
	display: none;
}

#st-editing-tools-edit {
	display: none;
}

#st-mode-wysiwyg-button
{
	font-size: 70%;
	margin-left: 4em;
}

#st-mode-wikitext-button
{
	font-size: 70%;
}

#st-edit-tips
{
	font-size: 70%;
}

.wikiwyg_button {
	background: #FFFFFF;
	border: 1px solid #FFFFFF;
	cursor: pointer;
	width: 20px;
	height: 20px;
	vertical-align: bottom;
}

.wikiwyg_button:hover {
	border: 1px outset;
}

.wikiwyg_button:active {
	border: 1px inset;
}

#wikiwyg_toolbar {
	display: none;
}

/* Sidebox Pagetools: Revisions, Watchlist */
#st-side-box-pagetools {
	border-collapse: collapse;
}

#st-rewind-norevisions {
	font-family: Helvetica, Arial, sans-serif;
	font-size: 11px;
	color: #777;
	text-decoration: none;
}

#st-side-box-pagetools a {
	font-family: Helvetica, Arial, sans-serif;
	font-size: 11px;
	color: #555;
	text-decoration: none;
}

/* Page View Tags/Incoming Links Sidebox */

#st-tags {
	background: #f4fff4;
	border-color: #bbeebb;
	color: #999;
}

#st-tags-title {
	color: #595;
}

#st-tags-addlink, #st-tags-addbutton {
	font-weight: bold;
}

#st-tags-listing {
	margin-bottom: 5px;
}

#st-tags-addinput, #st-tags-message, #st-tags-suggestion {
	display: none;
}

#st-tags-deletemessage {
	font-size: 90%;
	color: #555;
	display: none;
	margin-top: 0.5em;
	margin-bottom: 0.5em;
}

#st-tags-suggestion {
	margin-top: 2px;
}

.st-tags-level1 {
	font-size: 90%;
}

.st-tags-level2 {
	font-size: 100%;
}

.st-tags-level3 {
	font-size: 110%;
}

.st-tags-level4 {
	font-size: 120%;
}

.st-tags-level5 {
	font-size: 130%;
}

.st-tags-tagline .st-tags-tagdelete {
	text-decoration: none;
	color: #ccc;
}

.st-tags-tagline a {
	text-decoration: none;
	color: #444;
}

#st-tags-field {
	width: 95%;
}

#st-incoming-links {
	border-color: #ebb;
	background-color: #fff4f4;
}

#st-incoming-links-title {
	color: #b78;
}

#st-attachments {
	border-color: #bbe;
	background-color: #f4f4ff;
}

#st-attachments-uploadbutton, #st-attachments-managebutton {

}
#st-attachments-buttons-uploadbutton {
	margin: 0px;
	padding: 0px;
	padding-left: 2px;
}
#st-attachments-buttons-managebutton {
	margin: 0px;
	padding: 0px;
	padding-right: 2px;
}

#st-attachments-buttons td {
	padding-right: 3px;
	font-size: 99%;
}

#st-attachments-buttons {
	border-collapse: collapse;
	margin: 0px;
	padding: 0px;
	margin-top: 5px;
}

#st-attachments-title {
	color: #77b;
}

.st-attachments-line {
	width:100%;
	overflow:hidden;
}

/* Actions Bar */

#st-actions-bar-spacer {
	clear:both;
	height:0.5em;
	overflow:hidden;
}

#st-actions-bar-spacer-clear {
	clear:both;
	height:1px;
	overflow:hidden;
}


#st-actions-bar, #st-editing-tools-bar {
	margin-left: 30px !important;
	margin-right: 30px !important;
}

/* Footer */
#st-footer {
	margin-top: -8px;
	margin-bottom: 5px;
	clear: both;
}

/* Socialtext Attribution */

#st-socialtext-attribution {
	clear: both;
	text-align: center;
	font-size: 80%;
	font-family: Helvetica, sans-serif;
}

#st-socialtext-attribution-link {
	text-decoration: none;
}

#st-socialtext-attribution-image {
	border: 0;
}


/* Page Actions */

#st-edit-button-border-left-middle, #st-login-to-edit-button-border-left-middle {
	background: url('../../images/st/button-blue/left-middle.gif') left top repeat-y;
}
#st-edit-button-border-right-middle, #st-login-to-edit-button-border-right-middle {
	background: url('../../images/st/button-blue/right-middle.gif') right top repeat-y;
}

#st-edit-button-border-left-top, #st-login-to-edit-button-border-left-top {
	background: url('../../images/st/button-blue/left-top.gif') left top no-repeat;
}
#st-edit-button-border-right-top, #st-login-to-edit-button-border-right-top {
	background: url('../../images/st/button-blue/right-top.gif') right top no-repeat;
}

#st-edit-button-border-left-bottom, #st-login-to-edit-button-border-left-bottom {
	background: url('../../images/st/button-blue/left-bottom.gif') left bottom no-repeat;
}

#st-edit-button-border-right-bottom, #st-login-to-edit-button-border-right-bottom {
	background: url('../../images/st/button-blue/right-bottom.gif') right bottom no-repeat;
}

#st-edit-button-link, #st-login-to-edit-button-link {
}

#st-comment-button-border-left-middle {
	background: url('../../images/st/button-purple/left-middle.gif') left top repeat-y;
}

#st-comment-button-border-right-middle {
	background: url('../../images/st/button-purple/right-middle.gif') right top repeat-y;
}

#st-comment-button-border-left-top {
	background: url('../../images/st/button-purple/left-top.gif') left top no-repeat;
}

#st-comment-button-border-right-top {
	background: url('../../images/st/button-purple/right-top.gif') right top no-repeat;
}

#st-comment-button-border-left-bottom {
	background: url('../../images/st/button-purple/left-bottom.gif') left bottom no-repeat;
}

#st-comment-button-border-right-bottom {
	background: url('../../images/st/button-purple/right-bottom.gif') right bottom no-repeat;
}

#st-comment-button-link {
}

#st-save-button-border-left-middle {
	background: url('../../images/st/button-green/left-middle.gif') left top repeat-y;
}
#st-save-button-border-right-middle {
	background: url('../../images/st/button-green/right-middle.gif') right top repeat-y;
}

#st-save-button-border-left-top {
	background: url('../../images/st/button-green/left-top.gif') left top no-repeat;
}
#st-save-button-border-right-top {
	background: url('../../images/st/button-green/right-top.gif') right top no-repeat;
}

#st-save-button-border-left-bottom {
	background: url('../../images/st/button-green/left-bottom.gif') left bottom no-repeat;
}

#st-save-button-border-right-bottom {
	background: url('../../images/st/button-green/right-bottom.gif') right bottom no-repeat;
}

#st-save-button-link {
}

#st-preview-button-border-left-middle {
	background: url('../../images/st/button-gold/left-middle.gif') left top repeat-y;
}
#st-preview-button-border-right-middle {
	background: url('../../images/st/button-gold/right-middle.gif') right top repeat-y;
}

#st-preview-button-border-left-top {
	background: url('../../images/st/button-gold/left-top.gif') left top no-repeat;
}
#st-preview-button-border-right-top {
	background: url('../../images/st/button-gold/right-top.gif') right top no-repeat;
}

#st-preview-button-border-left-bottom {
	background: url('../../images/st/button-gold/left-bottom.gif') left bottom no-repeat;
}

#st-preview-button-border-right-bottom {
	background: url('../../images/st/button-gold/right-bottom.gif') right bottom no-repeat;
}

#st-preview-button-link {
}

#st-cancel-button-border-left-middle {
	background: url('../../images/st/button-crimson/left-middle.gif') left top repeat-y;
}
#st-cancel-button-border-right-middle {
	background: url('../../images/st/button-crimson/right-middle.gif') right top repeat-y;
}

#st-cancel-button-border-left-top {
	background: url('../../images/st/button-crimson/left-top.gif') left top no-repeat;
}
#st-cancel-button-border-right-top {
	background: url('../../images/st/button-crimson/right-top.gif') right top no-repeat;
}

#st-cancel-button-border-left-bottom {
	background: url('../../images/st/button-crimson/left-bottom.gif') left bottom no-repeat;
}

#st-cancel-button-border-right-bottom {
	background: url('../../images/st/button-crimson/right-bottom.gif') right bottom no-repeat;
}

#st-cancel-button-link {
}

#st-edit-more-button-border-left-middle {
	background: url('../../images/st/button-blue/left-middle.gif') left top repeat-y;
}
#st-edit-more-button-border-right-middle {
	background: url('../../images/st/button-blue/right-middle.gif') right top repeat-y;
}

#st-edit-more-button-border-left-top {
	background: url('../../images/st/button-blue/left-top.gif') left top no-repeat;
}
#st-edit-more-button-border-right-top {
	background: url('../../images/st/button-blue/right-top.gif') right top no-repeat;
}

#st-edit-more-button-border-left-bottom {
	background: url('../../images/st/button-blue/left-bottom.gif') left bottom no-repeat;
}

#st-edit-more-button-border-right-bottom {
	background: url('../../images/st/button-blue/right-bottom.gif') right bottom no-repeat;
}

#st-edit-more-button-link {
}

.st-page-action-button-link {
	min-height: 24px;
	min-width: 100px;
	text-align: center;
	font-family: Helvetica, Verdana, sans-serif;
	font-size: 90%;
	text-decoration: none;
	color: #fff;
	font-weight: bold;
	display: block;
	padding-top: 8px;
	padding-bottom: 0px;
	margin-bottom: -3px;
	width: 100%;
	margin-left: -2px;
}
* html .st-page-action-button-link {
	padding-top: 5px;
	padding-bottom: 0px;
	height: 24px;
}

.st-page-action-button {
	float: left;
	margin: 0;
	padding: 0;
	margin-right: 10px;
	min-height: 20px;
	border-collapse: collapse;
	width: 100px;
}

/* Attach File Interface */

#st-attachments-attachinterface {
	font-family: Helvetica, sans-serif;
	font-size: 90%;
	display: none;
	position: fixed;
	left: 0px;
	top: 0px;
	width: 100%;
	height: 100%;
	z-index: 2000;
	background-image: url('../../images/st/popup/bg.png');
}
#st-attachments-manageinterface {
	font-family: Helvetica, sans-serif;
	font-size: 90%;
	display: none;
	position: absolute;
	left: 0px;
	top: 0px;
	width: 100%;
	height: 100%;
	z-index: 2000;
	background-image: url('../../images/st/popup/bg.png');
}

* html #st-attachments-attachinterface {
	background-image: none;
}
* html #st-attachments-manageinterface {
	background-image: none;
}
* html .popup-overlay {
	background-image: url('../../images/st/popup/bg.png');
	background-color: #000;
	opacity: .70;
	position: absolute;
	left: 0px;
	top: 0px;
	width: 100%;
	height: 100%;
	z-index: 2001;
}

#st-attachments-attach-interface {
	z-index: 2002;
	background-color: #fff;
	color: #000;
	border: 4px solid #ccc;
	padding: 1em;
	width: 520px;
	margin-left: auto;
	margin-right: auto;
	margin-top: 10%;
	position: absolute;
	top: 0px;
}

* html #st-attachments-attach-interface {
}

#st-attachments-attach-formtarget {
	width: 0px;
	height: 0px;
	border: 0;
	padding: 0;
	margin: 0;
}

#st-attachments-attach-message {
	font-size: 90%;
	font-family: Verdana, Arial, Helvetica, Sans-Serif;
}

#st-attachments-attach-title {
	font-weight: bold;
	font-size: 120%;
}

#st-attachments-attach-close {
	float: right;
	margin-top: 6px;
}

#st-attachments-attach-uploadbutton {
	float: right;
	margin-right: 6px;
	margin-top: 6px;
	padding-bottom: 0;
}

#st-attachments-attach-fileprompt {
	margin: 0.2em 0 0.4em 0;
	padding-bottom: 0px;
}

#st-attachments-attach-submit {
	font-size: 90%;
	font-weight: bold;
}

#st-attachments-attach-filename {
	font-size: 90%;
}

#st-attachments-attach-uploadmessage {
	font-weight: bold;
	margin-bottom: 1em;
	display: none;
}

#st-attachments-attach-error {
	font-weight: bold;
	color: #f00;
	margin-bottom: 1em;
	display: none;
}

#st-attachments-attach-list {
	display: none;
	color: #666;
	font-size: 90%;
	margin-top: 1em;
	margin-bottom: 1em;
	border-top: 1px solid #4949BA;
	border-bottom: 1px solid #4949BA;
	background-color: #F5F5F5;
	padding: 3px;
}

.st-attachments-attach-listlabel {
	font-size: 90%;
	color: #4949BA;
}

/* Queue File Dialog */

#st-attachmentsqueue-interface {
	font-family: Helvetica, sans-serif;
	font-size: 90%;
	display: none;
	position: fixed;
	left: 0px;
	top: 0px;
	width: 100%;
	height: 100%;
	background-image: url('../../images/st/popup/bg.png'); /* Don't forget IE hack for ship! */
	z-index: 2000;
}

* html #st-attachmentsqueue-interface {
	background-image: none;
}

#st-attachmentsqueue-dialog {
	z-index: 2002;
	background-color: #fff;
	color: #000;
	border: 4px solid #ccc;
	padding: 1em;
	width: 530px;
	margin-left: auto;
	margin-right: auto;
	margin-top: 10%;
	position: absolute;
	top: 0px;
}

* html #st-attachmentsqueue-dialog {
}

#st-attachmentsqueue-fileprompt {
	margin-bottom: 0.4em;
	margin-top: 0;
	padding-bottom: 0;
}

#st-attachmentsqueue-title {
	font-weight: bold;
	font-size: 120%;
}

#st-attachmentsqueue-close {
	float: right;
	margin-top: 6px;
}

#st-attachmentsqueue-uploadbutton {
	float: right;
	margin-right: 6px;
	margin-top: 6px;
	padding-bottom: 0;
}

#st-attachmentsqueue-submit {
	font-size: 90%;
}

#st-attachmentsqueue-filename {
	font-size: 90%;
}

#st-attachmentsqueue-message {
	font-size: 90%;
	font-family: Verdana, Arial, Helvetica, Sans-Serif;
}

#st-attachmentsqueue-uploadmessage {
	font-weight: bold;
	margin-bottom: 1em;
	display: none;
}

#st-attachmentsqueue-error {
	font-weight: bold;
	color: #f00;
	margin-bottom: 1em;
	display: none;
}

#st-attachmentsqueue-list {
	display: none;
	color: #666;
	font-size: 90%;
	margin-top: 1em;
	margin-bottom: 1em;
	border-top: 1px solid #4949BA;
	border-bottom: 1px solid #4949BA;
	background-color: #F5F5F5;
	padding: 3px;
}

.st-attachmentsqueue-listlabel {
	font-size: 90%;
	color: #4949BA;
}

/* Lists */

tr.st-trbg-even, tr.st-trbg-even td{
	background-color: #f3f7f7;
}

tr.w-st-even-row, tr.w-st-even-row td {
	background-color: #f3f7f7;
}

.query-results-header-title, .query-results-header-last-edit-by {
	text-align: left;
}


.query-results-row-revisions {
	text-align: right;
}

.query-results-content {
	font-size: 85%;
	border-collapse: collapse;
	border: 1px dashed #ddd;
	border-left: 1px solid #ddd;
	border-right: 1px solid #ddd;
}

.query-results-row {
	border-collapse: collapse;
	border: 1px dashed #ddd;
	border-left: 1px solid #ddd;
	border-right: 1px solid #ddd;
}

.query-results-row a {
	text-decoration: underline;
	color: #00f;
}

.query-results-row td {
	font-family: Verdana;
	padding: 0.3em;
	border-left: 1px dashed #ddd;
	border-right: 1px dashed #ddd;
	border-top: 1px solid #ddd;
	border-bottom: 1px solid #ddd;
}

.query-results-header-row {
	border-collapse: collapse;
	border: 1px dashed #ddd;
	border-left: 1px solid #ddd;
	border-right: 1px solid #ddd;
}

.query-results-header-row a {
	text-decoration: underline;
	color: #00f;
}

.query-results-header-row th {
	font-family: Helvetica;
	padding: 0.3em;
	border-left: 1px dashed #ddd;
	border-right: 1px dashed #ddd;
	border-top: 1px solid #ddd;
	border-bottom: 1px solid #ddd;
}

div.st-actionbutton {
	float: left;
}

div#deleteme-st-actions-bar {
	clear: both;
	margin: 0.8em 20px 0.2em auto;
	padding: 0;
}

/* Manage File Interface */



#st-attachments-manage-interface {
	z-index: 2002;
	background-color: #fff;
	color: #000;
	border: 4px solid #ccc;
	padding: 1em;
	width: 520px;
	margin-left: auto;
	margin-right: auto;
	margin-top: 10%;
	position: absolute;
	top: 0px;
}

#st-attachments-manage-filetable {
	height: 150px;
	margin: 0;
	padding: 0;
	width: 100%;
	overflow: auto;
	border: 1px solid #ccc;
}

#st-attachments-manage-filelisting tbody td {
	font-size: 90%;
}
#st-attachments-manage-filelisting {
	width: 100%;
	border-collapse: collapse;
	border: 0;
	margin: 0;
	padding: 0;
}

#st-attachments-manage-fileheader {
	background: #ccc;
	font-weight: bold;
	border-bottom: 1px black solid;
}

#st-attachments-manage-close {
	float: right;
	margin-top: 3px;
	margin-right: -2px;
	font-weight: bold;
}

#st-attachments-manage-delete {
	margin-top: 3px;
	float: left;
	font-weight: bold;
}

.st-attachments-manage-filerow {
	border-bottom: 1px solid #ccc;
}

.row-odd {
	background-color: #eee;
}

.row-even {
	background-color: #fff;
}

.row-on {
	background-color: #009 !important;
	color: white !important;
}

.row-on a {
	color: #fff !important;
}

#st-attachments-manage-deletemessage {
	color: red;
}

/* Page tools icons */

#st-pagetools-print {
	background: url('../../images/st/pagetools/print.gif')
	left center no-repeat;
}

#st-pagetools-email {
	background: url('../../images/st/pagetools/email.gif')
	left center no-repeat;
}

#st-pagetools-tools {
	background: url('../../images/st/pagetools/tools.gif')
	left center no-repeat;
}

/*
 #st-pagetools-watch {
	background: url('../../images/st/pagetools/watch-blue.gif')
	left center no-repeat;
}
*/


/* *********** Settings *********** */

#st-settings-pane {
}
* html #settings-pane { font-size: 85%;}

.settings-start-table {
}
* html .settings-start-table { font-size: 90%;}

#st-settings-select {
	padding: 0px 10px 10px 10px;
	vertical-align: top;
	width: 1px;

	background-color: #eff1ec;
	border: none;
}

#st-settings-section {
	padding: 0px 10px 10px 10px;
	vertical-align: top;
}

.settings-top-header {
	margin-top: 1em;
	font-weight: bold;
	width: 15em;
}

.settings-header {
	margin-top: 1em;
	font-weight: bold;
}

.settings-selections {
	padding: 0px 0px 0px 20px;
	line-height: 1.5em;
}

.settings-selections a:visited, .settings-selections a:active {
	color: #0000ff;
}

.settings-link {
	clear: both;
	display: block;
}

.settings-section-left {
	text-align: right;
}

.settings-label {
	font-weight: bold;
}

.settings-help {
	color: #888;
}

.settings-comment {
}

.users-invite-message {
	padding: 0.5em 0.5em 0.5em 2em;
	background-color: #eee;
	/* This seems necessary to fix an IE bug that sometimes
		causes the text in this div to be invisible */
	z-index: 1000;
}

.workspace-entry-header {
	margin-top: .5em;
	font-weight: bold;
}

.workspace-entry {
	margin-left: 3em;
}

.workspace-entry-p {
	margin-top: .5em;
	margin-bottom: .75em;
}

.workspace-subentry {
	font-style: italic;
	font-weight: bold;
	margin-left: 1.5em;
}

.preferences-td {
	padding:.5em 0 1.5em 0;
}

.preferences-query {
	text-align: left;
}

.preference-radio {
	background-color: #cec;
}
.user-settings-listall-headings td {
	background-color: #eff3ef;
}

#st-settings-save {
	padding-bottom: 0.5em;
}

.standard-button-cancel {
	font-weight: bold;
	background-color: #71004b;

	border-left: 1px solid #aaa;
	border-top: 1px solid #aaa;
	border-bottom: 2px solid #333;
	border-right: 2px solid #333;
	color: #f4f3b9;
	width: 8em;
}

.standard-button-submit {
	font-weight: bold;
	background-color: #656084;

	border-left: 1px solid #aaa;
	border-top: 1px solid #aaa;
	border-bottom: 2px solid #333;
	border-right: 2px solid #333;
	color: #f4f3b9;
	width: 8em;
}

#st-settings {
	font-family: Verdana, Arial, Helvetica, Sans-Serif;
	font-size: 90%;
}


/* Listview Tabs */


#st-listview a:visited {
	color: #551a8b;
}
#st-listview-tabs ul {
	display: block;
	list-style: none outside;
	margin: 0 0 0 4em;
	padding: 0;
	font-family: Helvetica, Arial, Sans-serif;
	font-size: 80%;
}

#st-listview-tabs li {
	display: block;
	float: left;
	margin: 0 0.8em 0 0;
	padding: 3px 0.6em 0 0.6em;
	border: 1px solid #d8d8d8;
	border-bottom: 1px solid rgb(128, 169, 243);
	background-color: #f4f4f4;
	position: relative;
	bottom: -2px;
}

#st-listview-tabs li.spacer {
	margin: 0 0.8em 0 2em;
}

#st-listview-tabs a {
	color: #bbb;
	text-decoration: none;
}

#st-listview-tabs li.selected {
	background-color: #fff !important;
	border: 1px solid rgb(128, 169, 243) !important;
	border-bottom: 1px solid #fff !important;
	font-weight: bold !important;
}

#st-listview-tabs li.selected a {
	color: #000 !important;
}

/* Category List Display */

#st-category-display-links {
	margin-bottom: 1em;
	font-size: 90%;
}

#st-tag-listbody {
	font-family: Helvetica, Verdana, sans-serif;
}

/* Attachments List Display */

#st-attachments-list-body table.button-table {
	margin-top: 0.1em;
	font-size: 80%;
}


/* ********** PageTools Menu ************** */

div#st-editing-tools {
	float: left;
}

div#st-pagetools {
	z-index: 300;
	font-family: Helvetica, Verdana, sans-serif;
	font-size: 10px;
	float: right;
	margin: 18px 0 0 0em;
	color: #000;
	vertical-align: bottom;
	position: relative;
}

#st-pagetools a {
	text-decoration: none;
	color: black;
	padding-left: 17px;
}

#st-pagetools span {
	color: inherit;
	padding-left: 17px;
	vertical-align: top;
}

#st-pagetools span.st-watchlist-link {
	color: inherit;
	vertical-align: top;
}

.st-watchlist-link {
	cursor: pointer;
}

div#st-pagetools ul.level2 {
	z-index: 300;
	margin: 0;
	padding: 0;
	background: white;
	border: 1px solid #CCC;
	border-width: 0 1px;
}

div#st-pagetools li {
	position: relative;
	list-style: none;
	margin: 0;
	float: left;
	width: 7em;
	line-height: 11px;
}

div#st-pagetools ul ul li:hover {
	background: #BFE2FF;
}

div#st-pagetools li a {
	display: block;
	text-decoration: none;
}

div#st-pagetools>ul a {
	width: auto;
}

div#st-pagetools ul ul {
	position: absolute;
	width: auto;
	display: none;
}

div#st-pagetools ul ul li {
	line-height: 1.5em;
/*	width: 100%; */
	width: 14em;
}

.first {
	border-top: 1px solid #CCC;
}

.separator {
	border-bottom: 1px solid #CCC;
}

div#st-pagetools ul ul li a {
	border-bottom: 1px solid #CCC;
	padding-left: 15px;
	padding-right: 3px;
	margin-right: 3px;
	border: 0px;
}

div#st-pagetools li.submenu li.submenu:hover {
	z-index: 300;
	background-color: #BFE2FF;
}

div#st-pagetools ul.level1 li.submenu:hover ul.level2 {
	display:block;
}

div#st-pagetools ul.level2 {
	top: 1.0em;
	left: -9.5em;
}

/*

=head2 Revision List Display

Change these styles to update the page revision list.

*/

#st-revision-list-table {
	border-collapse: collapse;
	font-size: 85%;
	color: #000;
}

.st-page-title-decorator {
	color: #C80000;
}

.st-revision-header-emphasis {
	color: #C80000;
}

.st-revision-list-compare-button-row {
}

.st-revision-list-compare-button-cell {
	padding-top: 0.3em;
	text-align: center;
}

.st-revision-list-compare-button {
}

#st-revision-list-header-row {
}

#st-revision-list-header-select {
	padding: 6px 2px 2px 2px;
	text-align: center;
}

#st-revision-list-header-revision {
	padding: 6px 2px 2px 2px;
	text-align: left;
}

#st-revision-list-header-edited-by {
	padding: 6px 2px 2px 2px;
	text-align: center;
}

#st-revision-list-header-date {
	padding: 6px 2px 2px 2px;
	text-align: center;
}

.st-revision-list-row {
	border-collapse: collapse;
	border: 1px dashed #ddd;
	border-left: 1px solid #ddd;
	border-right: 1px solid #ddd;
}

.st-revision-list-row td {
	font-family: Verdana;
	padding: 0.3em;
	border-left: 1px dashed #ddd;
	border-right: 1px dashed #ddd;
	border-top: 1px solid #ddd;
	border-bottom: 1px solid #ddd;
}

.st-revision-list-row-select {
	padding: 3px 0 2px 0;
	text-align: center;
}

.st-revision-list-row-select-old {
}

.st-revision-list-row-select-new {
}

.st-revision-list-row-revision {
}

.st-revision-list-row-revision-link {
}

.st-revision-list-row-edited-by {
}

.st-revision-list-row-date {
}

/* Revision Menu */

#st-pagetools.st-revision-view-bar {
	float: left;
}

ul.st-revision-menu {
	list-style: none;
	margin: 0;
	padding: 0.2em;
	font-size: 80%;
}

ul.st-revision-menu li {
	float: left;
	padding: 0 0.4em 0 0.4em;
	border-right: thin solid #000000;
}

ul.st-revision-menu li.st-last {
	border-right: none;
}

#st-restore-revision-button {
	font-size: 80%;
}

/*

=head2 Revision Compare Display

When comparing two revisions of a page, these styles apply.

*/

#st-revision-compare-table {
	background-color: #f0f0f0;
}

#st-revision-compare-table td {
	background-color: white;
}

.st-revision-compare-old {
	background-color: #fdd;
	text-decoration: line-through;
}
.st-revision-compare-new {
	background-color: #dfd;
	font-weight: bold;
}

/* Weblog View */

#st-weblog {
	padding: 0;
}

#st-content-weblog-display-width-controller {
}
#st-content-weblog-display-width-controller-nav {
	width: 230px;
	margin-left: 15px;
	border-left: 5px solid #ddd;
	margin-top: -1px;
}

#st-weblog-content {
	font-family: Verdana, Helvetica, sans-serif;
	margin-top: -1px;
	margin-bottom: -1px;
	border-top: 1px solid #80a9f3;
	border-bottom: 1px solid #80a9f3;
}

#st-weblog-title {
	font-family: 'Trebuchet MS', Verdana, Helvetica, sans-serif;
	font-family: 'Times New Roman', serif;
	background-color: #80a9f3;
	color: #fff;
	font-size: 150%;
	font-weight: bold;
	padding: 0.2em;
	padding-left: 1em;
}

#st-weblog-wikititle {
	font-family: Helvetica, Verdana, sans-serif;
	font-style: italic;
	font-size: 40%;
	color: #fff;
	margin-bottom: 0.2em;
	margin-top: 0.1em;
	padding-top: 0;
}

#st-weblog-titletext {
	font-family: Helvetica, Verdana, sans-serif;
	font-weight: bold;
	color: #fff;
}

div.st-weblog-entry {
	margin-top: 0.2em;
	margin-bottom: 4.8em;
	padding: 0 1.5em 0 1.5em;
}

.st-page-title {
	clear: both;
}

div.st-weblog-entrytitle span.text {
	font-family: Helvetica, Verdana, sans-serif;
	font-size: 150%;
	font-weight: bold;
	color: #000;
}

.st-weblog-entrycontent {
	font-family: Verdana, Helvetica, sans-serif;
	font-size: 90%;
	border-bottom: 1px solid #888;
}

.st-weblog-byline {
	float: left;
	text-align: left;
	font-style: italic;
	font-size: 70%;
	font-family: Verdana, Helvetica, sans-serif;
}

.st-weblog-post-links {
	float: right;
	text-align: right;
	font-size: 70%;
	font-family: Verdana, Helvetica, sans-serif;
}

#st-weblog-archives, #st-weblog-navigation {
	position: relative;
	float: right;
	width: 230px;
}

#st-weblog-archives {
	margin-top: 15px;
	clear: right;
}

#st-weblog-archives-title, #st-weblog-navigation-title {
	margin-left: 15px;
	font-family: Helvetica, sans-serif;
	font-size: 95%;
	font-weight: bold;
	color: #999;
	border-bottom: 2px solid #f99;
	padding-bottom: 5px;
	padding-top: 5px;
	margin-bottom: 5px;
}

#st-weblog-navigation-content {
	margin-left: 15px;
	font-size: 80%;
}

#st-weblog-archives ul {
	margin: 0;
	padding: 0;
}

#st-weblog-archives ul li {
	/* list-type: none; */
	display: block;
	font-size: 80%;
	font-family: Helvetica, sans-serif;
	padding-left: 15px;
}

#st-weblog-newpost {
	padding: 0.5em 0.7em 0.3em 0.3em;
}

#st-weblog-newpost-button {
}

#st-weblog-actionbar-chooseweblog {
	float: right;
}

#st-weblog-postbyemail {
	font-size: 70%;
	font-family: Verdana, Helvetica, sans-serif;
	color: #def;
	padding-top: 0.4em;
}

#st-weblog-postbyemail-link {
	color: #00c;
}

.st-weblog-chooseprompt {
	font-size: 90%;
	font-family: Verdana, Helvetica, sans-serif;
	padding-right: 0.2em;
	color: #000;
}

.st-spacer {
	padding-right: 0.1em;
	padding-left: 0.1em;
}

.st-weblog-preventries {
	padding-bottom: 20px;
	clear: both;
}
.st-weblog-nextentries {
	clear: both;
}

div.st-weblog-entrynav {
	margin-top: 0.2em;
	margin-bottom: 1.8em;
	padding: 0;
}

span.st-weblog-previousentries, span.st-weblog-nextentries {
	font-size: 90%;
	font-family: Verdana, Helvetica, sans-serif;
	padding-left: 1em;
}

/* ******* Page Stats ******** */

#st-usagereport-navbar {
	font-size: 80%;
	padding: 0;
	margin: 0;
}

#st-usagereport-date {
	font-weight: bold;
	margin-top: 1em;
}

#st-page-usagereport h1 {
	font-size: 1.3em;
	font-weight: bold;
	margin-top: 1.2em;
	margin-bottom: 0.3em;
}

#st-page-usagereport h2 {
	font-size: 1.1em;
	font-weight: bold;
	margin-top: 0.8em;
	margin-bottom: 0.3em;
}

/* New Page */
#st-newpage-save, #st-newpage-duplicate {
	display: none;
	position: fixed;
	left: 0px;
	top: 0px;
	width: 100%;
	height: 100%;
	background: url('../../images/st/popup/bg.png'); /* Don't forget IE hack for ship! */
	z-index: 2000;
}

#st-newpage-save-interface {
	background-color: #fff;
	color: #000;
	border: 4px solid #ccc;
	padding: 0.5em;
	width: 450px;
	margin-left: auto;
	margin-right: auto;
	margin-top: 10%;
	position:absolute;
	top:0px;
	z-index:2003;
}

#st-newpage-duplicate-interface {
	background-color: #fff;
	color: #000;
	border: 4px solid #ccc;
	padding: 0.5em;
	width: 530px;
	margin-left: auto;
	margin-right: auto;
	margin-top: 10%;
	position:absolute;
	top:0px;
	z-index:2003;
}

#st-newpage-save-title, #st-newpage-duplicate-title {
	margin: 0;
	padding: 0;
	font-weight: bold;
	font-family: Helvetica, sans-serif;
	font-size: 100%;
}

#st-newpage-save-prompt, #st-newpage-duplicate-prompt {
	font-family: Helvetica, sans-serif;
	font-size: 90%;
	margin-bottom: 0.4em;
}

#st-newpage-save-buttons, #st-newpage-duplicate-buttons {
	margin-top: 0.8em;
	text-align: right;
}

.st-newpage-duplicate-option {
	font-family: Helvetica, sans-serif;
	font-size: 90%;
	margin: 0;
	padding: 0;
}

#st-newpage-duplicate-pagename {
	font-size: 90%;
}

.st-newpage-duplicate-emphasis {
	background-color: #FFFF00;
	font-weight: bold;
}

#st-newpage-save-field-pagename {
	margin-bottom: 0;
	margin-top: 0.2em;
	padding-bottom: 0;
	font-size: 90%;
}

#st-newpage-save-tip {
	margin-bottom: 0;
	margin-top: 1.2em;
	padding-bottom: 0;
	font-size: 75%;
	color: #888;
}

/* Wikitext Styling */

.wiki {
}

.wiki hr {
	margin-top: .4em;
	margin-bottom: .4em;
}

.wiki .short-rule {
	width: 25%;
}

.wiki .medium-rule {
	width: 50%
}

.wiki ul,
.wiki ol,
.wiki blockquote {
	margin-left: 2em;
	padding-left: 0em;
}

.wiki table {
	border-collapse: collapse;
}

.wiki td {
	border: 1px;
	border-style: solid;
	padding: .2em;
	vertical-align: top;
}

.wiki h1,
.wiki h2,
.wiki h3,
.wiki h4,
.wiki h5,
.wiki h6 {
	font-weight: bold;
	font-style: normal;
	margin-top: 0.1em;
	margin-bottom: 8px;
}

.wiki h1 {font-size: 200%;}
.wiki h2 {font-size: 170%;}
.wiki h3 {font-size: 145%;}
.wiki h4 {font-size: 125%;}
.wiki h5 {font-size: 110%;}
.wiki h6 {font-size: 100%;}

.wiki pre {
	background-color: #eee; /* XXX */
	margin-left: 1em;
	margin-right: 1em;
	padding: .2em;
}

.wiki .incipient {
	text-decoration: none;
	border-bottom: 1px dashed;
}

.wiki-include-title {
	background-color: #ccccff;
}

.wiki .wiki {
	position: relative;
	background-color: #ddddff;
	border: 1px solid #ccccff;
	padding: 3px;
}

.wafl_existence_error {
	color: rgb(200,0,0);
	border-bottom: 0.2em dashed rgb(200,0,0);
}

#st-edit-mode-container {
}

#st-edit-mode-view {
}

#st-page-editing-uploadbutton {
	z-index: 1500;
	float: left;
}

/* Comment UI */


body#st-commentui {
	background: #ffffff;
}

#st-commentui-container {
}

#st-commentui-container a:visited,
#st-commentui-container a:active {
	color: #00f;
}

#st-commentui-notetop {
}

#st-commentui-controls {
}

#st-commentui-savelink {
	background-color: #fffebd;
}

#st-commentui-cancellink {
}

#st-commentui-customfield {
}

#st-commentui-customfield .customfield-label {
}

#st-commentui-customfield .customfield-input {
}

#st-commentui-textarea {
	padding: 0;
	border-style: inset;
	border-width: thin;
	background-color: #ffd;
	color: black;
	width: 99%;
	height: 150px;
}

/*

=head2 Send Page by Email

Styles for the 'Send Page by Email' popup, accessed from the 'Email' dropdown
menu on the page bar.

*/

#email-page {
	background: #ffffff;
	font-size: 80%;
}

.email-page-row {
	clear: both;
}

.email-page-row-label {
	font-weight: bold;
	float: left;
	width: 5em;
	margin-left: 1.2em;
	margin-right: 1.2em;
	text-align: right;
}

.email-page-row-content {
	float: left;
	padding-bottom: 1.2em;
}

.email-page-user-select-column {
	float: left;
	padding-right: 1.2em;
	width: 14em;
}

#email-page-user-select-column-center {
	width: 10em;
}

.email-page-user-select-label {
	text-align: center;
}

#email-page-user-select-add-label {
	padding-top: 1em;
}

.email-page-user-select-button-group {
	padding-bottom: 2em;
}

.email-page-input {
	width: 120px;
	clear: both;
	display: block;
}


.email-page-select {
	width: 175px;
	font-size: x-small;
}

#email-page-error-message {
	text-align: center;
}

#email-page-buttons-container {
	clear: both;
}

#email-page-buttons {
	text-align: center;
}

.email-page-input-new {
	width: 175px;
}

/* System Status, Red with icon */

#st-system-status-alert {
	clear: both;
	width: 50%;
	margin-left: 25%;
	margin-top: 10px;
	padding: 5px;
	color: #c00;
	font-weight: bold;
	font-size: 80%;
	background: transparent url('../../images/st/system-message/important-note.gif') no-repeat 5px center;
	padding-left: 60px;
	min-height: 38px;
}
* html #st-system-status-alert {
	height: 38px;
}

/* System Status, Green */

#st-system-status {
	clear: both;
	text-align:center;
	width: 80%;
	margin-left: 10%;
	padding: 8px 0 3px 0;
	color: #0a0;
	font-family: Arial, Helvetica, sans-serif;
	font-size: 80%;
}

.socialtextLogo {
	text-align: center;
}
/*}}}*/
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};

//--
//-- Sparklines
//--

config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
	var data = [];
	var min = 0;
	var max = 0;
	var v;
	for(var t=0; t<params.length; t++) {
		v = parseInt(params[t]);
		if(v < min)
			min = v;
		if(v > max)
			max = v;
		data.push(v);
	}
	if(data.length < 1)
		return;
	var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
	box.title = data.join(",");
	var w = box.offsetWidth;
	var h = box.offsetHeight;
	box.style.paddingRight = (data.length * 2 - w) + "px";
	box.style.position = "relative";
	for(var d=0; d<data.length; d++) {
		var tick = document.createElement("img");
		tick.border = 0;
		tick.className = "sparktick";
		tick.style.position = "absolute";
		tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
		tick.style.left = d*2 + "px";
		tick.style.width = "2px";
		v = Math.floor(((data[d] - min)/(max-min)) * h);
		tick.style.top = (h-v) + "px";
		tick.style.height = v + "px";
		box.appendChild(tick);
	}
};


}
//}}}
/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};

//--
//-- Crypto functions and associated conversion routines
//--

// Crypto "namespace"
function Crypto() {}

// Convert a string to an array of big-endian 32-bit words
Crypto.strToBe32s = function(str)
{
	var be = Array();
	var len = Math.floor(str.length/4);
	var i, j;
	for(i=0, j=0; i<len; i++, j+=4) {
		be[i] = ((str.charCodeAt(j)&0xff) << 24)|((str.charCodeAt(j+1)&0xff) << 16)|((str.charCodeAt(j+2)&0xff) << 8)|(str.charCodeAt(j+3)&0xff);
	}
	while (j<str.length) {
		be[j>>2] |= (str.charCodeAt(j)&0xff)<<(24-(j*8)%32);
		j++;
	}
	return be;
};

// Convert an array of big-endian 32-bit words to a string
Crypto.be32sToStr = function(be)
{
	var str = "";
	for(var i=0;i<be.length*32;i+=8)
		str += String.fromCharCode((be[i>>5]>>>(24-i%32)) & 0xff);
	return str;
};

// Convert an array of big-endian 32-bit words to a hex string
Crypto.be32sToHex = function(be)
{
	var hex = "0123456789ABCDEF";
	var str = "";
	for(var i=0;i<be.length*4;i++)
		str += hex.charAt((be[i>>2]>>((3-i%4)*8+4))&0xF) + hex.charAt((be[i>>2]>>((3-i%4)*8))&0xF);
	return str;
};

// Return, in hex, the SHA-1 hash of a string
Crypto.hexSha1Str = function(str)
{
	return Crypto.be32sToHex(Crypto.sha1Str(str));
};

// Return the SHA-1 hash of a string
Crypto.sha1Str = function(str)
{
	return Crypto.sha1(Crypto.strToBe32s(str),str.length);
};

// Calculate the SHA-1 hash of an array of blen bytes of big-endian 32-bit words
Crypto.sha1 = function(x,blen)
{
	// Add 32-bit integers, wrapping at 32 bits
	add32 = function(a,b)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF);
		var msw = (a>>16)+(b>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Add five 32-bit integers, wrapping at 32 bits
	add32x5 = function(a,b,c,d,e)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF);
		var msw = (a>>16)+(b>>16)+(c>>16)+(d>>16)+(e>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Bitwise rotate left a 32-bit integer by 1 bit
	rol32 = function(n)
	{
		return (n>>>31)|(n<<1);
	};

	var len = blen*8;
	// Append padding so length in bits is 448 mod 512
	x[len>>5] |= 0x80 << (24-len%32);
	// Append length
	x[((len+64>>9)<<4)+15] = len;
	var w = Array(80);

	var k1 = 0x5A827999;
	var k2 = 0x6ED9EBA1;
	var k3 = 0x8F1BBCDC;
	var k4 = 0xCA62C1D6;

	var h0 = 0x67452301;
	var h1 = 0xEFCDAB89;
	var h2 = 0x98BADCFE;
	var h3 = 0x10325476;
	var h4 = 0xC3D2E1F0;

	for(var i=0;i<x.length;i+=16) {
		var j,t;
		var a = h0;
		var b = h1;
		var c = h2;
		var d = h3;
		var e = h4;
		for(j = 0;j<16;j++) {
			w[j] = x[i+j];
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=16;j<20;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=20;j<40;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k2);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=40;j<60;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),(b&c)|(d&(b|c)),w[j],k3);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=60;j<80;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k4);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}

		h0 = add32(h0,a);
		h1 = add32(h1,b);
		h2 = add32(h2,c);
		h3 = add32(h3,d);
		h4 = add32(h4,e);
	}
	return Array(h0,h1,h2,h3,h4);
};


}
//}}}
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};

//--
//-- Deprecated code
//--

// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
	w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};

// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = function(w)
{
	var lookaheadRegExp = new RegExp(this.lookahead,"mg");
	lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var text = lookaheadMatch[1];
		if(config.browser.isIE)
			text = text.replace(/\n/g,"\r");
		createTiddlyElement(w.output,"pre",null,null,text);
		w.nextMatch = lookaheadRegExp.lastIndex;
	}
};

// @Deprecated: Use <br> or <br /> instead of <<br>>
config.macros.br = {};
config.macros.br.handler = function(place)
{
	createTiddlyElement(place,"br");
};

// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
	var i = this.indexOf(item);
	return i == -1 ? null : i;
};

// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
	return store.getLoader().internalizeTiddler(store,this,title,divRef);
};

// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
	return store.getSaver().externalizeTiddler(store,this);
};

// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
	return store.allTiddlersAsHtml();
}

// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
	refreshPageTemplate(title);
}

// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
	story.displayTiddlers(srcElement,titles,template,animate);
}

// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
	story.displayTiddler(srcElement,title,template,animate);
}

// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;

// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");

}
//}}}
Sve informacije o slobodnom softveru za knjiลพniฤno poslovanje Koha su dostupne na sluลพbenim stranicama softvera http://koha-community.org.

{toc: }

Koha je integrirani knjiลพniฤni softver ลกto znaฤi da podrลพava cjelokupno knjiลพniฤno poslovanje - nabavu, obradu i pretraลพivanje. 

Koha je otvoreni softver ลกto znaฤi da je podatke iz Kohe moguฤ‡e razmjenjivati s drugim sustavima kroz standarde i protokole.


^ Osnovna funkcionalnost

^^ Nabava

* korisnici mogu predloลพiti naslove za nabavu (evidencija desiderata)
* nabava iz viลกe izvora financiranja (mjesta troลกka)
* nabava prema ugovoru s dobavljaฤem
* voฤ‘enje kompletne dokumentacije o procesu nabave (izdavanje narudลพbenica, evidencija raฤuna)
* automatsko dodijeljivanje inventarnog broja prilikom zaprimanja graฤ‘e
* nekoliko naฤina za izradu inicijalnog zapisa o graฤ‘i koja se nabavlja:
** izrada minimanlong kataloลพnog zapisa
** preuzimanje udaljenih podataka uz pomoฤ‡ Z39.50 protokola
** preuzimanje podataka iz lokalne datoteke s MARC zapisima
** preuzimanje podataka iz baze desiderata

^^ Katalogizacija - izrada bibliografskih zapisa i odrลพavanje knjiลพniฤnog kataloga

* podrลกka za MARC (UNIMARC i MARC21) formate
* Z39.50 klijent za preuzimanje zapisa iz drugih knjiลพnica i izvora u MARC formatima
* moguฤ‡nost unosa zapisa iz datoteke s podacima u MARC formatu
* prireฤ‘eni predloลกci (templates) za katalogizaciju razliฤitih vrsta graฤ‘e (minimanlo monografije i serijske publikacije)
* moguฤ‡nost samostalnog dodavanja novih predloลพaka za katalogizaciju, prema vlastitim potrebama, uz moguฤ‡nost koriลกtenja bilo kojeg elementa iz MARC standarda zajedno s lokalnim poljima
* provjera valjanosti unesenih podataka i dojava greลกaka
* izrada novog zapisa na temelju postojeฤ‡eg
* moguฤ‡nost uvida u viลกe zapisa istovremeno
* moguฤ‡ost sakrivanja pojedinih bibliografskih zapisa iz javnog kataloga
* alat za dedupliciranje bibliografskih zapisa 

^^ Normativna kontrola

* podrลกka za MARC authority standard (osobna i korporativna imena, predmetna klasifikacija)
* moguฤ‡nost konfiguracije modula za normativnu kontrolu vezano uz naฤin automatskog povezivanja bibliogrfskih i normativnih zapisa
* alat za dedupliciranje normativnih zapisa

^^ Obrada primjeraka

* automatsko generiranje bar-kodova
* automatsko predlaganje signature na temelju klasifikacijske ili neke druge oznake
* slobodno oblikovane javna i interna napomena za primjerak
* evidencija oลกteฤ‡enih, izgubljenih i otpisanih primjeraka s moguฤ‡noลกฤ‡u dodavanja proizvoljno definiranih statusa
* moguฤ‡nost dodavanja nekoliko primjeraka odjednom s podacima koji su isti za te primjerke 
* podrลกka za tiskanje bar-kodova i signatura

^^ Obrada ฤasopisa (periodika)

* evidencija pretplate na ฤasopise
* zaprimanje sveลกฤiฤ‡a prema unaprijed odreฤ‘enom periodicitetu
* reklamacije ฤasopisa
* obavijeลกtavanje korisnika o prisizanju novih brojeva
* evidencija proslijeฤ‘ivanja novih naslova (routing list)

^^ Evidencija korisnika

* pretraลพivanje prema imenu i prema ฤlanskom broju korisnika
* moguฤ‡nost preuzimanja podataka o korisnicima iz drugih sustava u okolini (LDAP)
* moguฤ‡nost unoลกenja napomena i/ili obavijesti:
** internih napomena- vidljivih samo osoblju
** obavijesti namijenjenih korisniku vidljivih na korisniฤkoj stranici
* automatsko brisanje neaktivnih korisnika
* moguฤ‡nost dodavanja proizvoljnog broja razliฤitih identifikacijskih oznaka za korsnike (npr. OIB, JMBG, JMBAG, broj putovnice i sliฤno)
* procedura za anonimizaciju povijesti posudbe

^^ Cirkulacija

*Pravila posudbe*

* pravila posudbe definiraju se prema vrstama graฤ‘e i kategoriji korisnika te je potrebno odrediti:
** rokove posudbe,
** maksimalnu koliฤinu istovremeno posuฤ‘enih primjeraka graฤ‘e, 
** je li moguฤ‡e obnoviti rok posudbe i koliko puta je obnavljanje dozvoljeno,
** je li moguฤ‡e rezervirati graฤ‘u te
** plaฤ‡a li se zakasnina i period odgode plaฤ‡anja.
* moguฤ‡nost definiranja razliฤitih pravila posudbe za pojedine zbirke (branches)
* moguฤ‡nost postavljanja datuma do kojeg svi korisnici moraju vratiti knjige, bez obzira kad su ih posudili.
* moguฤ‡nost da se graฤ‘a posuฤ‘uje na razliฤito vrijeme: na sat, preko noฤ‡i, preko vikenda
* moguฤ‡nost da se dani kada je knjiลพnica zatvorena ne raฤunaju se u rok posudbe niti se u te dane raฤuna zakasnina
* moguฤ‡nost da se korisniku koji kasni s vraฤ‡anjem graฤ‘e ograniฤi posudba
* moguฤ‡nost da se korisniku koji nije platio zakasninu ograniฤi posudba
* moguฤ‡nost odreฤ‘enja maksimalnog iznosa zakasnine
* knjiลพno osoblje moลพe "pregaziti" bilo koje pravilo

*Posudba*

* brz i toฤan unos identifikacijskog broja korisnika jedinice (uฤitavanjem linijskog koda, podataka s identifikacijskih kartica i preko tipkovnice) s potvrdom podataka o korisniku i o jedinici
* automatsko blokiranje kod prekoraฤenja ovlasti zadanih u pravilima posudbe
* ispis jedinica kojima je istekao rok posudbe
* obavijest o neplaฤ‡enim zakasninama
* automatsko blokiranje ako je naslov rezerviran na drugog korisnika i moguฤ‡nost otkazivanja rezervacije
* prikaz poruka za korisnike od strane osoblja i interne napomene
* jednostavan pristup datoteci korisnika u svrhu provjere podataka
* obavijest ako je primjerak veฤ‡ posuฤ‘en (tj. nije prethodno razduลพen) i moguฤ‡nost da se akcije razduลพivanja i zaduลพivanja u takvim sluฤajevima obave u jednom koraku

*Obnavljanje zaduลพenja*

* moguฤ‡nost skupnog obnavljanja zaduลพenja za svu graฤ‘u koje je neki korisnik posudio
* moguฤ‡nost da korisnici samostalno obnove zaduลพenje
* novi rok se odreฤ‘uje prema datumu kad je rok istekao
* novi rok se odreฤ‘uje prema datumu kad je rok produลพen
* ako je naslov rezerviran, nije moguฤ‡e obnoviti zaduลพenje

*Rezervacije*

* postavljanje rezervacija na nivou naslova (ili na sve primjerke ili samo na odreฤ‘ene primjerke)
* redoslijed ฤekanja s moguฤ‡noลกฤ‡u davanja prioriteta pojedinim korisnicima
* _automatsko slanje poziva za vraฤ‡anje knjiga koje su rezervirane_
* automatsko slanje obavijesti korisniku kad je rezervirana graฤ‘a spremna za preuzimanje
* podeลกavanje vremenskog perioda u kojem korisnik mora podiฤ‡i rezerviranu knjigu
* _poniลกtenje rezervacije ako korisnik nije doลกao po rezerviranu jedinicu_
* poniลกtenje rezervacije nakon odreฤ‘enog vremena ako se zahtjevu nije udovoljilo
* moguฤ‡nost podeลกavanja maksimalnog broja rezervacija po korisniku
* korisnik ne moลพe rezervirati knjigu ako ima zakasninu veฤ‡u od nekog iznosa
* moguฤ‡nost da korisnici rezerviraju samo one knjige koje su trenutno u posudbi ili sve knjige (opcija)
* oลกteฤ‡enje knjige moguฤ‡e/nije moguฤ‡e rezervirati (opcija)
* moguฤ‡nost da se datum rezervacije postavi u buduฤ‡nost, a ne samo na dan kad je rezervacija uฤinjena
* moguฤ‡nost da korisnik samostalno rezervira naslov preko OPAC-a

*Zakasnine*

* iznos zakasnine odreฤ‘uje se prema danu, a razliฤito za razliฤite vrste graฤ‘e i kategorije korisnika
* korisnik ne moลพe posuditi knjigu ako ima viลกe od odreฤ‘enog iznosa zakasnine
* korisnik ne moลพe produลพiti rok vraฤ‡anja knjige ako ima viลกe od odreฤ‘enog iznosa zakasnine
* moguฤ‡nost tiskanja potvrde o plaฤ‡enoj zakasnini
* moguฤ‡nost "rastuฤ‡e zakasnine" kao kaznene mjere

*Vraฤ‡anje*

* vraฤ‡anje moguฤ‡e bez identifikacije korisnika
* ako korisnik ima zakasninu, moguฤ‡nost naplate direktno sa suฤelja za vraฤ‡anje

*Izvjeลกtaji*

* prireฤ‘eni osnovni izvjeลกtaji o cirkulaciji (zakasnine, rezervacije i prekoraฤenje roka vraฤ‡anja itd.), nabavi, katalogizaciji
* moguฤ‡nost da knjiลพnica sama odredi i neku drugu vrstu izvjeลกtaja potrebnih za poslovanje

^^ Pretraลพivanje (katalozi)

* posebno suฤelje za osoblje knjiลพnice
* posebno javno suฤelje za krajnje korisnike (OPAC)
* jednostavno i sloลพeno pretraลพivanje
* moguฤ‡nost dodavanja proizvoljne koliฤine polja u kriterije za pretraลพivanje
* sortiranje rezultata prema prozivoljnom broju kriterija
* formati prikaza podataka ISBD i MARC
* preuzimanje rezultata pretraลพivanja (MARC i dr.)
* slanje rezultata pretraลพivanja e-poลกtom
* viลกejeziฤno suฤelje
* moguฤ‡nost da se u OPAC-u sakriju neki primjerci, koji ostaju vidljivi osoblju knjiลพnice (npr. izgubljeni ili otpisani primjerci se ne vide u OPAC-u, a vide u suฤelju za osoblje)
* moguฤ‡nost da se u OPAC-u prikaลพe napomena o statusu primjerka razliฤita od one koja se vidi u intranetu (npr. u OPAC-u se vidi samo da je knjiga oลกteฤ‡ena, a u intranetu se vidi da li je poslana na uvez)
* moguฤ‡nost izrade javnih i privatnih popisa naslova koji se ฤuvaju u katalogu
* moguฤ‡nost da se u rezultatima pretraลพivanja prikaลพu podaci iz drugih izvora (npr. Amazon prikazi knjiga, Google books covers)
* pristup suฤelju za ureฤ‘ivanja zapisa direktno iz rezultata pretraลพivanja u suฤelju za knjiลพniฤare
* OPAC: poveznice na pretraลพivanje drugih izvora s ugraฤ‘enim upitima (veza na naslov u drugom izvoru, npr. katalogu neke druge knjiลพnice)
* OPAC: podrลกka za tagove

^^ Izvjeลกtaji

* moguฤ‡ost izrade izvjeลกtaja uz pomoฤ‡ SQL upita
* moguฤ‡nost dohvaฤ‡anja svih podataka u bazi u svrhu izrade izvjeลกtaja

^^ Moguฤ‡nosti za registrirane korisnike

* direktna prijava uz pomoฤ‡ AAI@EduHr i/ili ฤlanskog broja
* uvid u trenutna zaduลพenja i rezervacije na osobnoj stranici unutar sustava
* uvid u povijest ฤitanja
* moguฤ‡nost samostalne rezervacije knjiga
* spremanje/brisanje povijesti pretraลพivanja
* odabir vrste i frekvencije obavijesti koje korisnik prima putem elektroniฤke poลกte (zaduลพenje, razduลพenje, istek roka posudbe, ispunjena rezervacija)
* moguฤ‡nost mijenjanja osobnih podataka (osoblje treba odobriti promjene)
* moguฤ‡nost izrade popisa zanimljivih naslova koji se ฤuvaju na osobnoj stranici
* moguฤ‡nost dodavanja tagova i komentara uz naslove

^^ Slanje obavijesti korisnicima

e-mailom i/ili SMS-om:

* posudba
* vraฤ‡anje
* obavijest o prekoraฤenju roka posudbe
* upozorenje o skorom isteku roka posudbe
* rezervacija je spremna za preuzimanje

definiranje obavijesti:

* samostalno definiranje sadrลพaja poruke
* moguฤ‡nost definiranja razliฤitih obavijesti za razliฤite kategorije korisnika

^^ Podeลกavanje sustava i pomoฤ‡ni alati

* jednostavno administracijsko suฤelje dostupno preko web suฤelja
* moguฤ‡nost pretraลพivanja opcija u administracijskom suฤelju prema nazivu opcije i opisu
* moguฤ‡nost exporta cijele bibliografske baze podataka u razliฤite formate (minimalno MARC)
* moguฤ‡ost exporta svih ostalih podataka - podaci o korisnicima, (anonimizirana) povijest posudbe, podaci o nabavi i pretplati na ฤasopise

^ Opฤ‡e karakteristike

* web suฤelje za sve funkcije (nema potrebe instalirati klijente na radne stanice za knjiลพniฤare)
* potpuna utf-8 podrลกka u svim modulima
* moguฤ‡nost izrade prilagoฤ‘enog OPAC suฤelja radi usklaฤ‘ivanja s vizualnim dizajnom web stranica knjiลพnice
* moguฤ‡nost automatiziranja administratorskih zadataka izradom skripti
* zapisivanje logova za sve vaลพne akcije
* moguฤ‡nost automatskog mijenjanja podataka o primjercima prema odreฤ‘enim kriterijima
* _moguฤ‡nost automatskog mijenjanja bibliografskih zapisa prema odreฤ‘enim kriterijima_
* raspoloลพivost nadogradnje sustava (nova verzija softvera) barem 2 puta godiลกnje

^ Integracija s drugim sustavima

* integracija s RFID opremom (Knjiลพnica FFZG)
* integracija sa sustavom studomata - moguฤ‡nost ograniฤavanja upisa studentima koji nisu podmirli obaveze u knjiลพnici (nevraฤ‡ene knjiga i zakasnine) (Knjiลพnica FER)
* usklaฤ‘ivanje vizulanog dizajna s webom organizacije (koriลกtenjem CSS-a)
* single sign-on, LDAP
* isporuka popisa u formatu prikladnom za preuzimanje u druge sustave (ISO-2709, JSON, RSS, OAI, ..)

----

^ Tehniฤka specifikacija

* Moguฤ‡nost instalacije na postojeฤ‡u infrastrukturu virtualnih servera (VMware)
* Specifikacija virtualne maลกine: dual-core, min. 2GB RAM, 20 GB disk)

* Pristup do virtualne maลกine koriลกtenjem Cisco VPN-a
* Operativni sustav GNU Debian Linux, programski jezik Perl, baza podataka MySQL
* Moguฤ‡nost stvanja dnevnih backup-a svih podataka i podeลกavanja na lokalnom disku dostupnom za backup.

* Moguฤ‡nost integracije s imeniฤkim direktorijima organizacije (Active Directory)
* koriลกtenjem LDAP-a za logiranje korisnika preko logina i passworda
* single sign-on autorizacije u browseru (Internet Explorer)
* Pristup web suฤelju za krajnje korisnike i knjiลพniฤare ลกtiฤ‡eno SSL certifikatima koriลกtenjem HTTPS-a
* Import postojeฤ‡ih organizacijskih jedinica iz drugih sustava (npr. SAP)
* Moguฤ‡nost generiranja meta podataka iz drugih izvora koriลกtenjem HTTP API-ja
> "Promjene"<http://saturn.ffzg.hr/koha-cug/index.cgi?action=recent_changes> | "Sve stranice"<http://saturn.ffzg.hr/koha-cug/index.cgi?action=changes&changes=all> | "Svi tagovi "<http://saturn.ffzg.hr/koha-cug/index.cgi?action=category_list>

_Croatian Koha user group_ je grupa zainteresiranih ustanova i pojedinaca za koriลกtenje, prilagodbu i razvoj knjiลพniฤnog sustava "Koha"<http://www.koha.org/>. Osnovana je kao "ekspertna skupina"[Osnivanje ekspertne skupine pri HrOpen] unutar udruge "HrOpen"<http://www.open.hr/>.

^ Kontakt

*Sastanci*
svaka prva srijeda u mjesecu u 13 sati u raฤunalnoj uฤionici na 1. katu Knjiลพnice Filozofskog fakulta (moลพe se dogovoriti i druga lokacija).

*Mailing lista*
Grupa ima "mailing listu za komunikaciju"<http://mjesec.ffzg.hr/cgi-bin/mailman/listinfo/koha-cug>. Ako nam ลพelite postaviti pitanje, piลกite na adresu mailing liste koha-cug@mjesec.ffzg.hr.

{section}

^ ล to je Koha?

Koha je potpuno slobodan i otvoren softver za knjiลพniฤno poslovanje kojeg koriste knjiลพnice ลกirom svijeta. Sva funkcionalnost Koha softvera dostupna je preko standardnog web preglednika ลกto znaฤi da za njeno koriลกtenje nije potrebno instalirati dodatne programe. Koha podrลพava MARC standard za bibliografske zapise, a za razmjenu zapisa koristi Z39.50 i SRU protokole. Funkcionalnost Kohe obuhvaฤ‡a kompletno knjiลพniฤno poslovanje, ukljuฤujuฤ‡i: javni katalog koji podrลพava razliฤite Web 2.0 sadrลพaje kao ลกto je tagiranje, komentiranje, socijalne mreลพe i RSS izvore; pristup osobnim stranicama u javnom katalogu; moguฤ‡nost izrade popisa literature; podesivo pretraลพivanje; posudbu i adminstraciju korisnika; modul za nabavu graฤ‘e; podrลกku za viลกe knjiลพnica u sustavu; upravljanje periodiฤnom graฤ‘om; modul za izvjeลกtaje i druge alate za podrลกku poslovanju knjiลพnice. Buduฤ‡i da se radi o slobodnom softveru, razvojem Kohe upravlja zajednica korisnika u kojoj usko suraฤ‘uju knjiลพniฤari i programeri. Nove stabilne verzije Kohe, koje sadrลพe popravke i nove funkcionalnosti, javno su dostupne svakih ลกest mjeseci. Slobodno dostupan kรดd uvelike olakลกava i integraciju Kohe s drugim sustavima koje knjiลพnica koristi u svojoj okolini kao i razvoj specifiฤne funkcionalnost za potrebe pojedine knjiลพnice, pod uvjetom da se svaka promjena uskladi s glavnom stabilnom verzijom i podijeli sa zajednicom.

* [Funkcionalnost Koha softvera]

^ Dokumentacija

Na ovom wikiju objavljujemo dokumentaciju o koriลกtenju Kohe i svega ลกto uz Kohu moลพe biti vezano. Postoje i [Koha lokalne dokumentacije] u pojedinim ustanovama.

* [Koha instalacija]
* [git]
* [MARC Bibliographic framework]
* [Pisanje Koha plugina]
* [Barcode]
* [Z39.50]
* [Prilagodba suฤelja]
* [Zebra reindeksiranje]
* [Prikaz podataka u intranetu - keywords to MARC mapping]
* [Koha lokalne dokumentacije]

* "Pretraลพivanje Koha mailing lista"<http://www.google.com/cse/home?cx=012030839526267669208:c5r4yzaftug>
<table align="left" border="0" cellpadding="1" cellspacing="1" style="width:100%">
	<tbody>
		<tr>
			<td style="text-align:center"><img alt="" src="data:image/jpeg;base64,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" style="height:75px; width:75px" /></td>
		</tr>
		<tr>
			<td style="text-align:center">
			<p>&nbsp;</p>

			<p><span style="font-size:11px">Radnim danom od 12-14 h moลพete pitati bilo ลกto :)</span></p>

			<p>&nbsp;</p>
			</td>
		</tr>
		<tr>
			<td style="text-align:center"><a href="mailto: dobrodosli@fer.hr"><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABEZJREFUeNrEVklLY00UvdGoiVPbgsStqOCM4loEl+IvcOXGhQvBCY3DSlFw0XwrMWhAEHEgvXZAEUEEwQGcwI3TygFnRY1R89W5zX1Uhm5Ck6QLypdnvXfPqXvOva9MXq+X/uUw409xcXFFYWHheEZGxrePj4+vSALGqPHw8ODe29tr3NnZ+ckEFLirtrbW9vz8HJVdp6amktlsdqqfvwikp6dbFSt6enqiSEtiMpno8/OTrFar15Dg/f3do1LPC9EYwPJ4PJ8Gga+vLwaPFgHgANOHgGRAeYRlCLcUSL3EBFZQArje39+T2+1mIuEYAop4MF9sbGwgAUm/0gV+oIaGBpiEWcfHx//1bgH69vbGv19eXsjlcnH8hIQEQ26zsAQrWczKyuLFg4MD2t7eppSUFA4aKjh2h51eXV1RTU0NZWZmGtpjk8CSzJj1BckEWKMsc3JyaH5+ntbW1ig5OTlkEgA/Ozvj95H2i4sLlLrhM8FiaXQPIAMynE4nqU5Fra2taFTsi7i4OJYEWfKf+D/WLRYLnZ+fU1FREfX19dHMzAyNjY2xHMCQKR6IkQwAXK8EIbG1tUWNjY2UnZ3NBtWD+E+Mk5MTys3Npe7ubpqenqbl5WV0PUMa2WjQDAgB3OMFzNHRUSbR1NTEJG5vbw0d9QlNj4+PKS8vj3p6emhycpKWlpYMM4vPfpsBBMXEgjwsJBwOB21sbLAc0BUksAt5B88CvKCggMHHx8dpYWGBwWVDmPo7ARkIRgD3YryhoSFaX1+nlpYWIxMSUMA7OztZNgGXGEJC7gUnIANSBXpnFBK4HxgY4AqBvvn5+VxmR0dHVF5eTr29vaz/7Owsm1F2Len2j+nTB4SEPCC/MWFI3F9eXrIPcD08PKSuri72BtaREehdWVlJ9fX17Hq8AyLiDz0urj59QPRBqSF1uiQC3tHRQaWlpXy9u7tjsLKyMu5wExMTtL+/T7u7uywRxsjICJck4koGJCb6hA8B3PibA0wRHA0Juy0pKaH29nYuRdT9ysoKlxgGdpqWlkaLi4sM1NbWxtfh4WGfHf+RgK4/JsDRUNBM1JGNgwI8MTGRX9S/EdI3sAYDIg4yhTiDg4PsG/nkIyMgHDQDei+AHHA13N3c3GyAS8Px/77LgIRzc3P8HMyK9yCNfOikEgI8IAtimv7+fta+rq6OHh8fOfDr62tI3wLEm5qa4lJFJioqKjgLwRqRjwSyO+zUZrPR6ekpVVdXU1JSktGUQj0DIB4I39zccMnigyTyBlSBmA7/BNPNzU02CrSqqqoKGThYJq6vr2l1dZVw4haT6zL6eABAYGy328N+JMOGUJbACPCAnAFFF5SZfpwKx3lQx5FzZ8CJKFKnYgHT4/t7ICaax3LB1D9G8dAoWgNYCtNiEFBNx44mgQUpt0hNOZYrzP8MCdSCQxFIU9fvqMhIJ0Dp/6qwfuDmfwEGABBbVKNP05pBAAAAAElFTkSuQmCC" /></a>&nbsp;<a href="<http://www.facebook.com/pages/Sredi>ลกnja-knjiลพnica-Fakulteta-elektrotehnike-i-raฤunarstva/171512036240295" target="_blank"><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABS1JREFUeNrEV02IHEUU/qq6+md+dvaX3QSDrIhkJQcxeogHQRAh6MGLHoRclCiCkoN4EQ+CIBLUg2jwJAQP5qCCAdGDKCoSlYDJQcUssgq7rMnszP7N7uzOdFeVr6p7en52ZnpyCPZsb09X19T73ve+914101rj/zyE+Tdz4s0TdxwZ+zKfc0uRkpFzi4xJY5A5ohFG4dLy9qnypVc+swDmjxS/P3ZnwbtRqQEMzi11WUeYP5wnG6VP6Y5ZADnf9a6vbWGrtg/GHANi+GGeq/ZN/LUdSm4n6Pbc1Dj9aQmlFFzhqjQEoYoaWivfuM54tibMDM0d7Nab2NysWHKZXZx+zzhcP4epqTG4nB8ArmWMPlQ6TAFozehU0Ex1OjLQuqYolSsVTDsreO2Zh3H3wl3W62Yk0WyG+PPvMj68uAjmeXB6AmpsaO1Ym20ARIk9pTL8DT0UY9jaquH24iq+uvAOvMLsgTn3bOzi3QtvYFJwMti9YGpLqTYARdwpJckz454aCiCSHDsbK3jr3LN9jZvj19+WUN/bx2QpQG+WGxvGlkoexAAIjWqhYsMV2GxGmJt0cPz4vV3jP16+hktXFrEwfxg/XF5EIedZXzS6HdLW2dheDwPKXnmGCMIwwnQ+Bzh+OlapbuHJF97DfiNEoeBjvJBHqeCRL+oAA0ojtdXDQNOmlhpGAAkniqI0fq2j3mjAczmmJybhe25CYkx1PxHbEPQyoEnBw6qyUe1OvY7V1XV40wRWRsSCQMuBanUdte0aAkrmUmkMxXy+f0prW4v6MNCiawCInd0QC4caeOmphxAEJC6qYUqGNu/nZibw9ssnsVffofwv4tufl/HT72UKg98/kxS6GYiFYajtz7+Zul2r4f6Tx/Dc6acTLYQ2HIz49l0Hz58+lc4v1z7H178soeALcN4PgIbuYkCrOA0HALDEUAnVhvZ0EQUpJTgB0KLbyo21KlVG46bsS6gBoHQnA8pmJw0OViB1Sly9VsUHH32BmYkcnnj0QQJAZVc4qG7UcP6Tb+C6LsaLAa7+8U+chn2ywNqTOq45LQDMiNB6OASA7+LKX1Vc/O48jt7G8Pgj90GIAK4nsL65jVfPfmwzIAg8TI0X4RP9WsoBjGoKXQcAMyBNl9LDi1COFH5oboy8pOZDzcjOJyYFaWB2ZsyKM/AcesbjNNT9AUjjcBcAM2BFyDO7MFPaCs/UAvuhqx0zXpmuaJrJgNh3NaROAKylA6WyW7Ep2TpWsf3Y78l4RKcYYQ0yzhx0MmDOKBHMcBYsrVolqUthczhdQxoir5kpZhntFCqx1wHA3Mm0DugMBsiYFjEAHbPGbMtVcTUV2QAkayOIAfB4IaVY9k7IhMmUWM2THhK1HiQ13skEYDOA94jQUBvvUoYzYLJFRyYDomRno5NCFiY7K5kJQOmeSmgT0e4HRtjU2g6nEmMmnZJrz05n2OZcs/YmVrQ7VIuBjC0xGTD7vGLeR0hacF2BfJCzLXg0ALGA0SnCOJ2iERRMHdjUHgK6/O8aXTntA1xcXytDcBaDyAyBtGVfdzOg09zO0kAuEFgp1/HAY2cQEmvGqCBKmHmjcYDsV72kD/RowLGVUNIKXGVogNkOaIxzxNt4ox2HmhIzIUAGA6bgOXaO09GOmQjIs+Ze2BofeLT6u/BZz9wRFGwXoLci+m1DSZEC2A9LL8I9+r7r7UCCj7QO61MjRn1FbbI89qPxsykAovRcE7MToZos0V3zpta7ucNI2NUQIWfO62bgPwEGAMkwMpYkCEKvAAAAAElFTkSuQmCC" /></a> <a href="<https://twitter.com/#!/KnjiznicaFER>" target="_blank"><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABXtJREFUeNrEV89vG0UU/mb2l+2GxkmgSRqJFqoWeqjKGcEBoaoSfwEXbhw4FM78EwghLhx6AU4IxAWoQBUSXEAVEhxQETSoahWSOJQmcexmvd75wXsz682unUYlUstGa2ftmXnffO973zwLay3+z0swgAsfXn3x7MLsR+1Wc1pba/AQMQVSyP4gy37rbL759Wsvfxbyh8/Oz3568fzZ+e5QP4ItA+04hBB/XKYnD2C62WhuDhV20iF/PzlD+DfHjGPn8BTxTKUtGlHoFnEAhsrkRilM6sFCBBGNCpGmuwRCIA5CSGOKpcShAFijkCurSwCG/jStaWjh6pJBGKHX38Haj9/hqakYrfYMejPHIR9fpIm01CEEzDO0CVzMPQBEiTLaMVAuSbsdGou1b7/AWxdfwKlzz7mPO50NfNJJMYwSD+IQF8fimCUATYG0Me4u4wcBtjbW8fzTS2VwvhYW5nH63jp+7uVoBfJQALQRLmYJQFHlsTBGH3oCBFSe49jsrHs2Rd6lDLDQSqC2+lA0RhyGAWbcVlNgfAqMrTBgPU0yCXzubJFzaXGUysgQQ5o0IkYI9qaCeTE0X2h1nxT4mJUUEP1qLAUsTFpkpAqnD7oDGtMmUMPbN7C9myIIiAUWryhKlhiyQkJOPYYWiTXh78fEyukfxSoBqHENCP9sC6TGiRTI6f+ZJMKl8yeRDVIIKdndqGJCP47KSakcvXSAH3p3sZrMIJb1glWYAEAp0Bq6AlSIQhO2ygCNpXGGtrt04oQLvldfnquSCbpOdrfw3vU7yChMVPN/XRehA8C3tTUGmJWRLliEVSZTrQ9yW2JFksM20W6EWNklPQSiursxAFwFrAFRB6CJEqa0ykA1yL6RRyZGa2W0Zjcjh+X0iipbwsUsAVjnA0RLbS3jlOwYYCYKBjhGRLtLAjF5Jli3tputlcaVlS1spDmaIVWMNvWhVQZsocoaAOHzxOVirRcgs8DBb+3s4trfPTdRjNlsRusMKdadgcLGQIOr2BgzackF9nA0MTemWspOTFyvuti9W4RmhbTz5a17+HJlG1NRMJEKWbyEtEBE1WGJEmXrAEyFu4IBX3J1ACwUVQb3KaBpZKOG3hP6vhmIg2RQmI3d/0SsaQBFedUW4kDAaI2RE3KlTJEb5s47hN/xfzwV7QQDRRna2iDKO1ltN+sTOlUyMFACz0w3MKfuoaMbaCUxuWE4sfuAewli0LugmExBTYSFM9X2wTmPm1jZ2YDOMm80dOfUuBxtNvDGmTlc+eU61joZ+rlxlI7CWEkNTKMFPbdIABMCYSbSNKYBX4Z2DGlE9rqsE6xvdDC7uITBIHPod4dDPLm4gEt0NGdZigHZrkuR9Kcjl1yWpvhmtYvvB8KVoagBsGX3VTBgCwbGRGVybLdm8NWNVbw+T8FIeNa5IzlhNnRWLMME8XRzohpmnwjx6rFdXP/pNv6hckrkGADUfEA417NiUi6NOMLVfogTvy7jwrnT6Cm4c8MVhK6bV5ViTb3EkSgiK46w3uXTQFZ/C7iYJQCnbs652L+9CJImLq+m6NqbeOXMEppx7Kpg5Oe1Rll4L2DaN0k7f/WH1EL4nrPmQnbMCf2hsz8A12BQD/jxWopr2zfx0vE2TrWPoBUHrlwF5T50+ReuWnICtkNt/ue3tnB3QFZMhlVtdlA5VzwA4S33oP6Ky6oVSvyZWvy+fBcNsUk2ywc9K4e0ULDnBE13Snlnlps0xo5XGAMQFQZ4k/oBzYSbi5jExxkbOO8w9X7M8SidDTN1LrTd9yCQVR+Iba75EH9gNzt4ZAFI3+c3lHawGnsApHibUvC+O30eyUXMBfLdago+IBBtbveKlu1hXnRAi5Te3+GHfwUYAPKMbY4wibr+AAAAAElFTkSuQmCC" /></a> <a href="<http://www.youtube.com/user/KnjiznicaFER>" target="_blank"><img alt="" src="data:image/png;base64,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" /></a></td>
		</tr>
		<tr>
			<td style="text-align:center"><img alt="" src="data:image/png;base64,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" /></td>
		</tr>
		<tr>
			<td style="text-align:center">099/2110914</td>
		</tr>
		<tr>
			<td style="text-align:center">&nbsp;</td>
		</tr>
		<tr>
			<td style="text-align:center"><embed height="350" src="<http://w.digsby.com/dw.swf?c=z60dqmdndczmc0sa>" type="application/x-shockwave-flash" width="170" wmode="transparent"></embed></td>
		</tr>
	</tbody>
</table>

<p>&nbsp;</p>
^ Podrลกka

* postoji li dokumentacija za administriranje i koriลกtenje programa?
* postoji li aktivna zajednica korisnika?
* ima li zajednica korisnika otvorenu mailing listu ili neki sliฤan medij komunikacije
* da li se i na koji naฤin unutar zajednice razmjenjuje softver razvijen kao dodatak ILS-u)

^ Prava koriลกtenja softvera

* prava na izmjenu - da li je dozvoljeno mijenjati softver radi prilagodbe vlastitim potrebama?
* mogu li se lokalno napravljene prilagodbe razmijenjivati s drugim korisnicima i pod kojim uvijetima?
* moลพemo li prodati uslugu implementacije cijelog sustava ili onog dijela koji je razvijen radi integracije nekoj drugoj ustanovi, unutar ili izvan sustava?

^ Konverzija i migracija

* obavezna migracija svih bibliografskih podatka i podatke o primjercima (lokacije, signature, statusi)
* migirirati podatke o broju posudbi za naslov/primjerak
* detaljni izvjeลกtaji o stanju podataka prije i nakon konverzije
* moguฤ‡nost testiranja konvertiranih podataka prije migracije
*Stranica za prevoฤ‘enje:*

* http://translate.koha-community.org/

{toc: }

^ Instalacija prijevoda

1)
presimiti tri datoteke s http://translate.koha-community.org/hr/38/edit.html (verzija 3.8) u `misc/translator/po/` direktorij

2)
napraviti update, odnosno uskladiti .po file s vlastitom verzijom Kohe
.pre
$ cd misc/translator
$ ./translate update hr-HR
.pre

3)
instalirati prijevode
.pre
$ cd misc/translator
$ ./translate install hr-HR
.pre


^ Podeลกavanje Kohe

system preferences - podesiti jezik na hr

BUG: language toolbar - Hrvatski umjesto hr-Hr

.pre
mysql> insert into language_descriptions (subtag,type,lang,description) values ("hr","language","hr","Hrvatski") ;
.pre

^ Prijevod dokumentacije

kako prevoditi dokumentaciju dostupnu preko intraneta? (_context help_)

^ MARC frameworks prijevodi

za prijevod MARC-a NSK ima konverzijsku tablicu. FFZG ima prevedene nazive polja u predloลกcima za katalogizaciju (Dorja)


^ Upute knjiลพniฤarima

pronaฤ‡i veฤ‡ napisane upute korisnicima i prevesti ih

----

Prevodioci: 
verzija 3.0: Irena, Alen, Marijana
verzija 3.6: Marijana, Sanja
verzija 3.8: Matina, Jasna, Sanja, Marijana
.pre

git checkout -b bug_xxxx origin/master
git bz apply XXXX
git commit --amend -s
git bz attach -e XXXX HEAD
.pre

^^ Ako ne prolazi database update:

.pre
git am --abort
git am -3iu /tmp/Update-database-patch-xxxxx.patch
.pre

resolve conflict ili ako otkrijeลก greลกku koju znaลก popraviti, onda:

.pre
git add <file>
git am --resolved
.pre

ako zeznem merge:

.pre
git diff origin/master opac/opac-detail.pl
vi opac/opac-detail.pl
git add opac/opac-detail.pl
git commit --amend
.pre

edit kohaversion.pl

^^ Ako patch ima viลกe fajlova:

.pre
git bz apply 7743
git am --abort
git am -3iu /tmp/Update-opac-userpl-to-use-KohaDates-TT-plugin-hYYLn8.patch
vi opac/opac-user.pl
git add opac/opac-user.pl
git am --resolved
.pre

idem ispoฤetka:

.pre
git bz apply 7743
.pre

a na ono ลกto je proลกlo apply odgovaram s "n"

onda rebase, na zadnji prije patcha kojeg testiram

.pre
git rebase -i 35279926b3865b003c6bd01d5c5378addfa903a9
.pre

tu je sad neku search/replace, ne sjeฤ‡am se ลกta treba zamijeniti - s/??/e/

onoliko puta koliko ima fajlova:

.pre
git commit --amend -s
git rebase --continue
git commit --amend -s
git rebase --continue
git commit --amend -s
git rebase --continue
git commit --amend -s
git rebase --continue
git commit --amend -s
git rebase --continue
git commit --amend -s
git rebase --continue
git commit --amend -s
git rebase --continue
git commit --amend -s
git rebase --continue

git bz attach 7743 HEAD^^^^^^^ -e
git bz attach 7743 HEAD^^^^^^
git bz attach 7743 HEAD^^^^^
git bz attach 7743 HEAD^^^^
git bz attach 7743 HEAD^^^
git bz attach 7743 HEAD^^
git bz attach 7743 HEAD^
git bz attach 7743 HEAD
.pre
Za potrebe preuzimanja zapisa sa web stranica koje ne pruลพaju Z39.50 pristup, napisao sam https://github.com/dpavlin/Biblio-Z3950 koji omoguฤ‡ava pretraลพivanje preko web suฤelja i isporuku MARC21 zapisa za Kohu.

Trenutno su na raspolaganju slijedeฤ‡e baze:

* Aleph NSK http://katalog.nsk.hr
** NSK01 - NSK katalog
** NSK10 - NSK normativna baza
** ZAG01 - Zagrebaฤko sveuฤiliลกte
* Google Books http://books.google.com/
** GOOGLEBOOKS
* HathiTrust catalogue http://www.hathitrust.org/
** HATHITRUST
* Digital Public Library of America http://dp.la/wiki/
** DPLA

server se nalazi na webpac2.rot13.org:9999 a za imena baza se koriste VELIKA SLOVA
> Sljedeฤ‡i sastanak je biti ฤ‡e objavljen na koha-cug mailing listi.

----

Za kronoloลกko praฤ‡enje deลกavanja stranicu treba nazvati prema datumu i staviti joj tag {tag: dnevnik}.

{tag_list: dnevnik}
{file: test-yaz-zebra.sh}

^ Server

sluลพi za razmjenu zapisa

^^^ Konfiguracija

Dodati novi public server prema uputama na http://wiki.koha-community.org/wiki/Troubleshooting_Koha_as_a_Z39.50_server

^^^ Dokumentacija

* http://wiki.koha-community.org/wiki/Search_Info

Najkorisnije:

* http://www.indexdata.com/zebra/doc/zebrasrv.html (pri dnu stranice)

Ostalo:

* http://koha.org/documentation/manual/3.0/administration/additional-parameters/z39.50-servers
* http://lists.indexdata.dk/pipermail/zebralist/2009-March/002142.html
* http://bugs.rot13.org/rt/Ticket/Display.html?id=377

^ FFZG

^^ yaz-client

.pre
dpavlin@koha-dev:~$ yaz-client 
Z> open localhost:9999/biblios
Connecting...OK.
Sent initrequest.
Connection accepted by v3 target.
ID     : 81
Name   : Zebra Information Server/GFS/YAZ
Version: 3.0.52 e687cb7eb87c841f0d1a374174d51d30371f2d97
Options: search present delSet triggerResourceCtrl scan sort extendedServices namedResultSets
Elapsed: 1.605266
Z> find human
Z> show 1
Z> quit
See you later, alligator.
.pre

Use Koha's CCL queries:

.pre
dpavlin@koha-dev:~$ yaz-client -c /etc/koha/zebradb/ccl.properties localhost:9999/biblios
Connecting...OK.
Sent initrequest.
Connection accepted by v3 target.
ID     : 81
Name   : Zebra Information Server/GFS/YAZ
Version: 4.1.7 c43e561fdfe12989a6040163dae0e28ba0a02453
Options: search present delSet triggerResourceCtrl scan sort extendedServices namedResultSets
Elapsed: 0.001445
Z> querytype ccl2rpn
Z> find (kw,wrdl,rtrn=human ) not Suppress=1
Sent searchRequest.
Received SearchResponse.
Search was a success.
Number of hits: 1935, setno 1
SearchResult-1: term=    human cnt=1935, term=    1 cnt=21
records returned: 0
Elapsed: 0.025643
Z> 
.pre

^ Debug Zebra problems

^^ enable all logging

.pre
# add all to http://www.loc.gov/z3950/agency/defns/bib1diag.html
ZEBRAOPTIONS="-v none,fatal,warn,all"

dpavlin@koha-dev:~$ sudo /etc/init.d/koha-zebra-ctl.sh restart
Restarting the Zebra Server

dpavlin@koha-dev:~$ sudo tail -f /var/log/koha/koha-zebradaemon-output.log | grep ERROR
18:45:58-29/03 zebrasrv(1) 605aecf5 [request] Init ERROR 1011 ID:81 Name:ZOOM-C/YAZ Version:4.1.7 c43e561fdfe12989a6040163dae0e28ba0a02453
.pre

Lookup error codes at http://www.loc.gov/z3950/agency/defns/bib1diag.html
* http://wiki.koha-community.org/wiki/Understanding_Zebra_indexing
* http://www.len.ro/work/koha-search-2/
* http://www.indexdata.com/zebra/doc/tutorial-oai-sru-zebra-indexes.html

* http://saturn.ffzg.hr/koha/index.cgi?zebra_indexing
Daklem.. stabilna verzija Kohe je 3.6.2.

Naลกa Koha na IRB-u je 3.4.4 pa idem upgrade-ati.

Buduฤ‡i da smo na git-u, prebacit cu se na 3.6.x branch

1. U source direktoriju smo

Povuฤemo update

.pre
# git pull
.pre

Provjerimo branch-eve

.pre
# git branch -r
.pre

Pratimo 3.6.x

.pre
# git branch --track 3.6.x upstream/3.6.x
.pre

Prebacimo se na njega

.pre
# git checkout 3.6.x
.pre

Provjerimo jel to to

.pre
# git branch
# git status
.pre

2. standardni Koha upgrade (bez make test)

.pre
# ./koha_perl_deps.pl -u -m
# perl Makefile.PL --prev-install-log /usr/share/koha/misc/koha-install-log
# make
# sudo make install
.pre

3. Update database

Ulogiramo se u admin suฤelje i pokrenemo update

Sve ok.. osim nekoliko greลกkica koje se mogu ignorirati:

.pre
Update errors :

* [Mon Dec 26 14:46:19 2011] updatedatabase.pl: DBD::mysql::db do failed: Duplicate entry 'BasketConfirmations' for key 'PRIMARY' at /usr/share/koha/intranet/cgi-bin/installer/data/mysql/updatedatabase.pl line 4374.
* [Mon Dec 26 14:46:21 2011] updatedatabase.pl: DBD::mysql::db do failed: Can't DROP 'issuesitemidx'; check that column/key exists at /usr/share/koha/intranet/cgi-bin/installer/data/mysql/updatedatabase.pl line 4425.
* [Mon Dec 26 14:46:21 2011] updatedatabase.pl: DBD::mysql::db do failed: Multiple primary key defined at /usr/share/koha/intranet/cgi-bin/installer/data/mysql/updatedatabase.pl line 4426.
* [Mon Dec 26 14:46:22 2011] updatedatabase.pl: DBD::mysql::db do failed: Duplicate key name 'priorityfoundidx' at /usr/share/koha/intranet/cgi-bin/installer/data/mysql/updatedatabase.pl line 4436.
.pre
* Razne teme vezane uz prilagodbu web suฤelja

{toc: }

^^ Prilagodba OPAC-a

* "KohaCon 2009: Customizing Your OPAC"<http://www.myacpl.org/koha/?p=160>

* "Adding a custom header to Koha 3โ€™s OPAC"<http://www.myacpl.org/koha/?p=30>

^^ Prevoฤ‘enje i instalacija .po datoteka

Instalacija .po datoteke prikazana je na:
"Prijevodi - FFZG"<http://saturn.ffzg.hr/koha/index.cgi?prijevodi>

Prilagoฤ‘avanje prikaza na web suฤelju poฤinje s ureฤ‘ivanjem engleske verzije predloลกka. Npr. ureฤ‘ivanje prikaza detalja odreฤ‘enog zapisa:

.pre
# vim $KOHA_SRC/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
.pre

Tada aลพurirate .po datoteku:

.pre
# cd $KOHA_SRC/misc-translator
# ./tmpl_process3.pl update -r -i ../../koha-tmpl/opac-tmpl/prog/en/ -s po/hr-HR-i-opac-t-prog-v--3000000.po
.pre

.. i instalirate samo hr template:

.pre
# ./tmpl_process3.pl install -r -i /home/koha/src/koha-git-dev/koha-tmpl/opac-tmpl/prog/en/ -o /usr/share/koha/opac/htdocs/opac-tmpl/prog/hr-HR/ -s po/hr-HR-i-opac-t-prog-v--3000000.po
.pre

Engleski dio iz $KOHA_SRC/koha-tmpl/opac-tmpl/prog/en/* se moลพe samo iskopirati.

_(alen): Ispravite me ako neลกto krivo radim ;)_
* Koha 3.4
* Koha za Permakulturni institut http://www.zmag.hr/
* dolaze kolege s Instituta za druลกtvena istraลพivanja
* http://map.knjiznica.ffzg.hr/ opis na http://blog.rot13.org/2011/04/google-map-data-layer-using-custom-tiles.html
{file: koha-mungle-borrowers.sh}

Ova stranica ฤ‡e pokuลกati dokumentirati instalaciju kohe na najjednostavniji moguฤ‡i naฤin. Primjeri za koriลกtenje su:

* demo instanca
* development instanca
* recovery iz backup-a ili testiranje sa zadnjom verzijom kohe iz git-a (potreban je samo dump baze)

Cijela virtualna maลกina dostupna je kao ~325 Mb download: http://mjesec.ffzg.hr/~dpavlin/koha/koha-lxc-20091207.tar.bz2

*Oprez*: ova virtualna maลกina *nema root password* a svi ostali passwordi su dokumentirani na ovoj stranici, tako da je mudro promjeniti ih ako je ลพelite koristiti!!

{toc}

^ Virtualna maลกina

Instalacija u "LXC"<http://sysadmin-cookbook.rot13.org/#lxc> (Linux containers) ali bilo koja instalacija bi trebala biti jednako dobra.

.pre
root@t61p:~# lxc-debian create
What is the name for the container ? [debian] koha-lxc
What hostname do you wish for this container ? [koha-lxc] 
What IP address do you wish for this container ? [172.20.0.21] 192.168.3.3
What is the gateway IP address ? [172.20.0.1] 192.168.3.1
What is the MTU size ? [1500] 
Specify the location of the rootfs [./rootfs.koha-lxc] /virtual/koha-lxc
Specify the location for an extra fstab file [(none)] 
Choose your architecture
1) amd64
2) i386
#? 2
Architecture i386 selected
Checking cache download ...Found.
Copying rootfs ...

...
.pre


Za locale bi bilo zgodno instalirati:

* en_US.UTF-8 UTF-8
* hr_HR.UTF-8 UTF-8

Default locale for the system environment: None

.pre
root@t61p:~# lxc-start --name koha-lxc
.pre

Naลกa virtualna maลกina se zove `koha-lxc` i da bi Koha testovi proลกli mora biti moguฤ‡e resolvati to DNS ime. Provjerite da `/etc/hosts` ima zapis:

.pre
koha-lxc:/srv/koha# grep koha-lxc /etc/hosts
192.168.3.3     koha-lxc
.pre

^^ Dodatni paketi

.pre
koha-lxc:~# apt-get install vim less openssh-server git-core dselect
.pre

^ Zebra

.pre
koha-lxc:/srv/koha# cat > /etc/apt/sources.list.d/indexdata.list
deb http://ftp.indexdata.dk/debian lenny main
deb-src http://ftp.indexdata.dk/debian lenny main
.pre




^ GIT

.pre
koha-lxc:~# cd /srv/
koha-lxc:/srv# git clone git://git.koha.org/pub/scm/koha.git
Initialized empty Git repository in /srv/koha/.git/
...
.pre

Ostatak instalacije manje-viลกe slijedi upute od Kohe: "INSTALL.debian-lenny"<http://koha-dev.rot13.org:8081/cgi-bin/gitweb.cgi?p=koha-ffzg.git;a=blob;f=INSTALL.debian-lenny;hb=refs/heads/koha-lxc>

^^ Lokalni branch

Napraviti lokalni branch za ovu intalaciju:

.pre
koha-lxc:/srv/koha# git checkout -b koha-lxc origin
Branch koha-lxc set up to track remote branch refs/remotes/origin/master.
Switched to a new branch "koha-lxc"
.pre

^^ Push lokalnih promjena na drugi git server

*Opcionalno* dodajte svoj public git repozitorij u koji ฤ‡e se spremati promjene:

.pre
koha-lxc:/srv/koha# git remote add koha-dev dpavlin@koha-dev.rot13.org:/srv/koha/
.pre

Prvi push mora imati `--all` parametar da prebaci i novo ime branch-a a ne samo promjene:

.pre
koha-lxc:/srv/koha# git push koha-dev --all
dpavlin@koha-dev.rot13.org's password: 
Counting objects: 5, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 339 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)
To dpavlin@koha-dev.rot13.org:/srv/koha/
 * [new branch]      koha-lxc -> koha-lxc
.pre


^ Debian paketi

.pre
dpkg --set-selections < install_misc/debian-lenny.packages
dselect
# Install, Quit
.pre


^ MySQL

U jednom trenutku instalacija ฤ‡e pitati:

> New password for the MySQL "root" user:

npr. *mysqlroot*

^^ Kreirati bazu

.pre
koha-lxc:~# mysqladmin -uroot -pmysqlroot create koha
.pre

^^ Kreirati korisnika

.pre
koha-lxc:~# mysql -uroot -pmysqlroot

mysql> grant all on koha.* to 'kohaadmin'@'localhost' identified by 'katikoan' ;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
.pre

Provjerite da se moลพete povezati sa kohaadmin korisnikom:

.pre
koha-lxc:/srv/koha# mysql -h localhost -ukohaadmin -pkatikoan koha
.pre




^ korisnik i grupa

.pre
koha-lxc:/srv/koha# addgroup koha
Adding group `koha' (GID 1000) ...
Done.

koha-lxc:/srv/koha# adduser --no-create-home --disabled-login --ingroup koha  --gecos Koha koha
Adding user `koha' ...
Adding new user `koha' (1000) with group `koha' ...
Not creating home directory `/home/koha'.
.pre




^ perl

^^ Debian paketi

.pre
koha-lxc:~# apt-get install libgd-gd2-perl libgd-barcode-perl libnumber-format-perl libcache-memcached-perl libparams-util-perl libmodule-install-perl
.pre

^^ CPAN

.pre
koha-lxc:~# cpan Algorithm::CheckDigits HTTP::OAI IPC::Cmd IPC::Cmd Memoize::Memcached PDF::API2::Simple PDF::Reuse::Barcode PDF::Table SMS::Send Storable Test::More Authen::CAS::Client
.pre

^^ Authen::CAS::Client

Trenutna development koha ima bug zbog kojeg je CAS autorizacija po defaultu ukljuฤena, pa zahtijeva joลก nekoliko dodatnih modula

.pre
koha-lxc:~# apt-get install libtest-mockobject-perl

koha-lxc:~# cpan Authen::CAS::Client
.pre

^^ SAX parser

.pre
koha-lxc:/srv/koha# apt-get remove libxml-sax-expat-perl

koha-lxc:/srv/koha# misc/sax_parser_print.pl
Koha wants something like:
    XML::LibXML::SAX::Parser=HASH(0x81fe220)
You have:
    XML::LibXML::SAX::Parser=HASH(0x9858cc0)
Looks good.
.pre




^ Koha install

.pre
koha-lxc:/srv/koha# perl Makefile.PL

...

koha-lxc:/srv/koha# make test

...

koha-lxc:/srv/koha# make install
/usr/bin/perl "-Iblib/arch" "-Iblib/lib" fix-perl-path.PL blib

Koha's files have now been installed.

In order to use Koha's command-line batch jobs,
you should set the following environment variables:

export KOHA_CONF=/etc/koha/koha-conf.xml
export PERL5LIB=/usr/share/koha/lib
.pre





^ Apache

.pre
ln -s /etc/koha/koha-httpd.conf /etc/apache2/sites-available/koha
.pre

Enable port 8080 for Koha intranet

.pre
koha-lxc:/srv/koha# echo 'Listen 8080' > /etc/apache2/conf.d/port-8080.conf
.pre

And finish Apache configuration:

.pre
koha-lxc:/srv/koha# a2enmod rewrite

koha-lxc:/srv/koha# a2ensite koha

koha-lxc:/srv/koha# /etc/init.d/apache2 restart
.pre

^ Zebra

.pre
koha-lxc:/srv/koha# ln -s /usr/share/koha/bin/koha-zebra-ctl.sh /etc/init.d/koha-zebra-daemon

koha-lxc:/srv/koha# update-rc.d koha-zebra-daemon defaults

koha-lxc:/srv/koha# /etc/init.d/koha-zebra-daemon start
.pre

^ Finish Koha instalation

http://192.168.3.3:8080/

* login: kohaadmin
* password: katikoan

from `/etc/koha/koha.conf.xml`

.pre
koha-lxc:/srv/koha# egrep '(user|pass)' /etc/koha/koha-conf.xml | tail -2
 <user>kohaadmin</user>
 <pass>katikoan</pass>
.pre

---
*Prebacivanje postojece instalacije na cisti Squeeze i upgrade na 3.2.x*

Konacno sam uhvatio vremena testirati upgrade 3.1 na 3.2.x iz Git-a (na IRB-u)

1. prebacio sam cijelu bazu i aplikaciju na virtualni server na kojem je Debian Squeeze

2. Instalirao sam sve potrebno i upogonio tu "staru" verziju KOHA-e na novom serveru
  - Squeeze sad ima gotovo sve Perl module u dostupne u paketima
  - putem CPAN-a sam instalirao samo NET::Z3950::ZOOM jer Debian paket ima neke konflikte u dependency-ima

3. gotovo sve je proradilo iz druge - bilo je naravno nekih tipfelera u apache konfiguraciji :)

4. tada sam povukao promjene iz gita, napravio rebase i mergao to u svoj branch

5. nakon toga sam napravio postupak upgrade-a kako je opisano u INSTALL.debian

6. vecina stvari je proradila ok, potrebno je u administraciji pokrenuti upgrade baze

7. LDAP nije proradio.. imam neki cudan problem i morao sam mijenjati lib/C4/Auth_with_ldap.pl

120c121
<               my $res = $db->bind( $principal_name, password => $password );
---
>               my $res = $db->bind( "uid=$principal_name,dc=irb,dc=hr", password => $password );
  

  - i u koha-conf.xml sam kod ldap konfigracije morao staviti:
    <update>0</update>


Sad to radi, buduci da nije danas bilo promjena u bazi, zaswitchat cu samo IP adrese servera, promijeniti hostname i valjda ce biti ok :)

_contributed by {user: alen.vodopijevec@gmail.com} on {date: 2011-01-06 14:22:30 GMT}_
* KohaCon 2010 videos: http://anitsirk.blip.tv/posts?view=archive
Teme za danas:

* Z39.50 screen scraping http://github.com/dpavlin/Biblio-Z3950
* popis dostupnih Z39.50 servera: http://irspy.indexdata.com/
* KohaCon 10 http://www.kohacon10.org.nz/
* <angular/> http://angularjs.org
Git sustav za praฤ‡enje promjena koji koristi Koha.

Mnogo bolje i potpunije upute: http://wiki.koha-community.org/wiki/Version_Control_Using_Git

*DON'T PANIC!*

{toc: }

^ podaci o korisniku

Da bi vaลกi commiti imali lijepo ime korisnika, morate prvo konfigurirati git

.pre
$ git config --global user.name "Dobrica Pavlinusic"
$ git config --global user.email "dpavlin@rot13.org"
.pre

Ovo je potrebno napraviti *samo jednom* za korisnika i primjenjuje se na svim repozitorijima na istoj maลกini.

^ repozitoriji

Repozitoriji su jednostavno serveri koji nam omoguฤ‡avaju da na njih ลกaljemo (push) ili sa njih vuฤemo (pull) promjene koje su u njima napravljene.

Kako je svaki checkout git-a potpuni repozitorij, svaki od njih moลพe postati javni repozitorij koji moลพe dijeliti promjene.

^^ Upstream Koha development

* http://git.koha.org/
* git://git.koha.org/pub/scm/koha.git

^^ Checkout (lokalna kopija)

.pre
git clone git://git.koha.org/pub/scm/koha.git
.pre

^^ FFZG promjene

* http://git.rot13.org/?p=koha.git;a=summary
* git://git.rot13.org/koha.git
* ssh://git.rot13.org/git/koha/

^^ promjene iz drugog repozitorija

Ako ลพelimo povuฤ‡i promjene iz drugog repozitorija (npr. druge instalacije unutar KOHA CUG-a) trebamo dodati novi remote repozitorij.

Na repozitoriju koji je napravljen od upstream Koha repozitorija, imamo jedan remote repozitorij `origin` za push i pull:

.pre
dpavlin@t61p:/srv/koha$ git remote -v
origin  git://git.koha.org/pub/scm/koha.git (fetch)
origin  git://git.koha.org/pub/scm/koha.git (push)
.pre

Sada ฤ‡emo dodati repozitorij sa FFZG development-a koristeฤ‡i obiฤnu ssh konekciju:

.pre
dpavlin@t61p:/srv/koha$ git remote add ffzg ssh://koha-dev.rot13.org/srv/koha/
dpavlin@t61p:/srv/koha$ git remote -v
ffzg    ssh://koha-dev.rot13.org/srv/koha/ (fetch)
ffzg    ssh://koha-dev.rot13.org/srv/koha/ (push)
origin  git://git.koha.org/pub/scm/koha.git (fetch)
origin  git://git.koha.org/pub/scm/koha.git (push)
.pre

i povuฤ‡i sve promjene lokalno:

.pre
dpavlin@t61p:/srv/koha$ git fetch ffzg
remote: Counting objects: 2019, done.
remote: Compressing objects: 100% (1440/1440), done.
remote: Total 1790 (delta 1116), reused 587 (delta 317)
Receiving objects: 100% (1790/1790), 1.40 MiB | 1.12 MiB/s, done.
Resolving deltas: 100% (1116/1116), completed with 67 local objects.
From ssh://koha-dev.rot13.org/srv/koha
 * [new branch]      ffzg       -> ffzg/ffzg
 * [new branch]      ffzg2      -> ffzg/ffzg2
 * [new branch]      koha-lxc   -> ffzg/koha-lxc
 * [new branch]      master     -> ffzg/master
 * [new branch]      origin     -> ffzg/origin
 * [new branch]      rt-390-signatura-zatvorenog-spremista -> ffzg/rt-390-signatura-zatvorenog-spremista
From ssh://koha-dev.rot13.org/srv/koha
 * [new tag]         ffzg       -> ffzg
.pre

^ branches

Branches su mjesta na kojima se povjest promjena grana u dva dijela. Jedan je development koji rade upstream developeri Kohe, a drugi su naลกe lokalne promjene za neลกto.

Nakon nekog vremena, potrebno je dva branch-a spojiti u jedan da bi preuzeli promjene. `gitk` nam moลพe pokazati to kao stablo:

{image: git-branch-merge.png}

Promjene se mogu preuzeti (merge) iz jednog branch-a u drugi.

^^ imenovanje

Branches nisu niลกta drugo nego ime za svaku toฤku i kojoj se razvoj dijeli u dva toka.

Dobri nazivi za branch:

* DNS hostname produkcijske ili develpment maลกine na kojoj je branch checkoutan
* veza na bug tracking (prefix-broj-kratak-opis)

^^ pregled

.pre
dpavlin@t61p:/srv/koha$ git branch -a
* master
  remotes/ffzg/ffzg
  remotes/ffzg/ffzg2
  remotes/ffzg/koha-lxc
  remotes/ffzg/master
  remotes/ffzg/origin
  remotes/ffzg/rt-390-signatura-zatvorenog-spremista
  remotes/origin/3.0.x
  remotes/origin/HEAD -> origin/master
  remotes/origin/biblibre-acq-preview-only
  remotes/origin/biblibre-integration
  remotes/origin/biblibre-sopac
  remotes/origin/labels_recon
  remotes/origin/master
  remotes/origin/rfid-direct-tagging
  remotes/origin/sysprefs_editor
.pre

^^ kreiranje

Pretpostavimo da ลพelimo kreirati branch za instalaciju na `koha.ffzg.hr`:

.pre
dpavlin@t61p:/srv/koha$ git checkout -b koha.ffzg.hr remotes/ffzg/ffzg2
Branch koha.ffzg.hr set up to track remote branch ffzg2 from ffzg.
Switched to a new branch 'koha.ffzg.hr'
.pre

^ patches

^^ format-patch

"git format-patch"<http://www.kernel.org/pub/software/scm/git/docs/git-format-patch.html>

Naลก cilj je napraviti patcheve od promjena koje smo napravili u naลกem branch-u:

{image: git-branch-sip-debug.png}

Iz slike vidimo da smo napravili `sip-debug` branch iz postojeฤ‡eg `3.0.x`

.pre
koha-lxc:/srv/koha# git format-patch -o sip2-changes 3.0.x
sip2-changes/0001-disable-PreFork-to-enable-easy-debugging.patch
sip2-changes/0002-remove-eval-so-it-won-t-hide-errors.patch
sip2-changes/0003-warn-about-missing-institutions-entry-in-config-xm.patch
.pre

Ovo ฤ‡e napraviti onoliko patcheva koliko imamo commita na naลกem branch-u koji smo napravili od `3.0.x`

^^ am (apply mail patch)

Prvo ฤ‡emo napraviti novi branch u naลกem repozitoriju `sip2-debug` u koji ฤ‡emo importati naลกe patcheve:

.pre
koha-lxc:/srv/koha# git checkout -b sip2-debug master
Switched to a new branch "sip2-debug"
.pre

Nakon toga moลพemo applyati samo one promjene koje su nam interesantne:

.pre
koha-lxc:/srv/koha# git am sip2-changes/0001-disable-PreFork-to-enable-easy-debugging.patch
Applying disable PreFork to enable easy debugging

koha-lxc:/srv/koha# git am sip2-changes/0002-remove-eval-so-it-won-t-hide-errors.patch
Applying remove eval so it won't hide errors

koha-lxc:/srv/koha# git am sip2-changes/0003-warn-about-missing-institutions-entry-in-config-xm.patch
Applying warn about missing <institutions> entry in config xml
.pre

^^ slanje na koha-patches listu

Koha prima patcheve preko "koha-patches liste"<http://lists.koha.org/pipermail/koha-patches/>

*yada, yada, nije testirano!*

.pre
# create all changes against master in patches dir:
git format-patch -p patches master
git send-mail --to koha-patches@koha.org patches

# reciving side would just pull whole mbox
git am mbox
.pre

^^ ne ลพelim viลกe svoje lokalne promjene!

.pre
git reset --hard
.pre

*Oprez* ovo ฤ‡e pobrisati *sve promjene koje su razliฤite od zadnjeg commit-a*

^ Viลกe informacija

* "RailsConf Git Talk"<http://www.gitcasts.com/posts/railsconf-git-talk> (mnogo zgodnih animacija ลกto se deลกava sa pojedinim komandama)
* "Koha wiki ima upute za koriลกtenje git-a"<http://wiki.koha-community.org/wiki/Version_Control_Using_Git>

^ Javni repozitorij

Da bi drugi korisnici mogli kopirati promjene, dovoljan je samo ssh. Meฤ‘utim, za anonimne korisnike treba podesiti git-daemon

Dobar savjet je *prvo* instalirati "gitweb"<http://git.rot13.org/> za overview.

^^ git-daemon

.pre
git-daemon --verbose --export-all --base-path=/var/cache/git
.pre

U Debian-u postoji paket `git-daemon-run` koji koristi runit (YMMV) koji se podeลกava u

.pre
dpavlin@mjesec:~$ cat /etc/sv/git-daemon/run    
#!/bin/sh
exec 2>&1
echo 'git-daemon starting.'
exec git-daemon --verbose --export-all --base-path=/var/cache/git
.pre

Dodan je `--export-all` i popravljen `--base-path` (sic!)
Obradom serijskih publikacija i nakladnickih cjelina, i opcenito o pravilima katalogiziacije i standardu MARC21.
.pre

# 100 | | 100a () (100B) (100C) (100d) (110A) (110b) (110c) (110d) (110e) (110f) (110g) (130A) (130d) (130f)) ((130 g 130h () 130k) (130l) (130) (130n) (130o) (130p) (130r) (130) (130t) | <br/> <br/>
# 245 | | 245a () (245B) (245f) (245g) (245k) (245n) (245p) (245s) () 245h |
# 246 | | (: 246i) (246a) (246b) (246f) (246g) (246n) (246p) () 246h |
# 242 | | (= 242a) (242b) (242n) (242p) () 242h |
245 # | | () 245c |
242 # | | 242c) (= |
# 250 | - | (250A) () 250b |
# 254 |, | () 254a |
# 255 |, | (255a) (255b) (255c) (255d) (255e) (255f) () 255g |
# 256 |, | () 256a |
# 257 |, | () 257a |
# 258 |, | 258a () () 258b |
# 260 | - | (260A) (260b)) (260c |
# 300 | - | (300A) (300B) (300C) (300d) 300e () () (300F) 300g |
# 306 | - |) (306a |
# 307 | - | 307a () () 307b |
# 310 | - | 310a (()) 310b |
# 321 | - | 321a () () 321b |
# 340 | - | (3403) (340A) (340b) (340C) (340d) (340e) (340f) (340h) () 340i |
# 342 | - | 342a () (342b) (342c) (342d) (342e) (342f) (342g) (342h) (342i) (342j) (342k) (342l) (342m) (342n) (342o) (342p) (342q) (342r) (342s) (342t) (342u) (342v) () 342w |
# 343 | - | 343a () (343b) (343c) (343d) (343e) (343f) (343g) (343h) () 343i |
# 351 | - | (3513) (351a) (351b) () 351c |
# 352 | - | 352a () (352b) (352c) (352d) (352e) (352f) (352g) (352i) () 352q |
# 362 | - | 362a () () 351z |
# 440 | - | 440a () (440n) (440p) (440V) (440x) |.
# 490 | - | 490a () () (490V) 490x |.
# 800 | - | 800a () (800b) (800c) (800d (800E)) ((800F) 800g) (800h) (800j) (800k) (800l) (800) (800n) (800o) () 800p (800q) (800R) (800s) (800t) (800u) (800V) |.
# 810 | - | 810a () (810b) (810c) (810d) (810e) (810F) 810g () (810h) (810k) (810l) (810m) (810n) (810o) (810p) () 810r (810s) 810t () () 810u (810v) |.
# 811 | - | 811a () (811c) (811d) (811e) (811f) (811g) (811h) (811k) (811l) (811n) (811p) (811q) (811s) (811t) () 811u (811v) |.
# 830 | - | 830a () (830d) (830f) (830g) (830h) (830k) (830l) (830m) (830n) (830o) (830p) (830r) (830s) (830t) () 830v |.
# 500 | <br/> <br/> | (5003)) (500a |
# 501 | <br/> <br/> | (501A) |
# 502 | <br/> <br/> | () 502a |
# 504 | <br/> <br/> | () 504a |
# 505 | <br/> <br/> | 505a () (505t) (505r) (505g) () 505u |
# 506 | <br/> <br/> | (5063) (506a) (506b) (506c) (506d) () 506u |
# 507 | <br/> <br/> | 507a (()) 507b |
# 508 | <br/> <br/> | 508a () () 508a |
# 510 | <br/> <br/> | (5103) 510a () (510x) (510c) () 510b |
# 511 | <br/> <br/> | () 511a |
# 513 | <br/> <br/> | 513a () () 513b |
# 514 | <br/> <br/> | 514z () (514a) (514b) (514c) (514d) (514e) (514f) (514g) (514h) (514i) (514j) (514k) (514m 514u ()) |
# 515 | <br/> <br/> | () 515a |
# 516 | <br/> <br/> | () 516a |
# 518 | <br/> <br/> | (5183) (518a) |
# 520 | <br/> <br/> | (5203) (520a) (520b) () 520u |
# 521 | <br/> <br/> | (5213) (521a)) (521b |
# 522 | <br/> <br/> | () 522a |
# 524 | <br/> <br/> | () 524a |
# 525 | <br/> <br/> | () 525a |
# 526 | <br/> <br/> | (\) (n510i \ n510a) 510b () () (510c) 510d (\) n510x |
# 530 | <br/> <br/> | (\ n5063) (\ n506a) (506b) (506c) (506d) (\) n506u |
# 533 | <br/> <br/> | (\ n5333) (\ n533a) (\ n533b) (\ n533c) (\ n533d) (\ n533e) (\ n533f) (\ n533m) (\) n533n |
# 534 | <br/> <br/> | (\ (n533p) \ (n533a) \) (n533b \ n533c () \) (n533d \ (n533e) \) (n533f \ (n533m) \) (n533n \ () n533t \) (n533x \ n533z) |
# 535 | <br/> <br/> | (\ n5353) (\ n535a) (\ n535b) (\ n535c) (\) n535d |
# 538 | <br/> <br/> | (\ n5383) (\ n538a) (\ n538i) (\) n538u |
# 540 | <br/> <br/> | (\) (n5403 \ n540a) 540b () () (540c) 540d (\) n520u |
# 544 | <br/> <br/> | (\ n5443) (\ n544a) (\ n544b) (\ n544c) (\ n544d) (\ n544e) (\) n544n |
# 545 | <br/> <br/> | (\ n545a) (545b) (\) n545u |
# 546 | <br/> <br/> | (\ n5463) (\ n546a) () 546b |
# 547 | <br/> <br/> | (\) n547a |
# 550 | <br/> <br/> | () 550a |
# 552 | <br/> <br/> | 552z () (552a) (552b) (552c) (552d) (552e) (552f) (552g) (552h) (552i) (552j) (552k) (552l 552m) () () (552n) 562o (552p)) (552u |
# 555 | <br/> <br/> | (5553) (555a) (555b) 555c () () (555d) 555u |
# 556 | <br/> <br/> | (556A) () 506z |
# 563 | <br/> <br/> | (5633) (563a)) (563u |
# 565 | <br/> <br/> | (5653) 565a () (565b) (565c) (565d) () 565e |
# 567 | <br/> <br/> | () 567a |
# 580 | <br/> <br/> | () 580a |
# 581 | <br/> <br/> | (5633) (581a)) (581z |
# 584 | <br/> <br/> | (5843) (584a) () 584b |
# 585 | <br/> <br/> | (5853) (585a) |
# 586 | <br/> <br/> | (5863) (586a) |
# 020 | ISBN <br/> <br/> <label>: </ label> | 020a () () 020c |
022 # | <br/> <br/> <label> ISSN: </ label> |) (022a |
# 222 | = | (222a)) (222b |
# 210 | = | (210a) () 210b |
# 024 | <br/> <br/> <label> Standardni broj: </ label> | (024a) (024c) (024d) (0242) |
# 027 | <br/> <br/> <label> Standard Tech. Report. No: </ label> |) (027a |
# 028 | <br/> <br/> <label> Publisher. No: </ label> | 028a () () 028b |
# 013 | <br/> <br/> <label> Patent No: </ label> | (013a) (013b) (013c) (013d) (013e) () 013f |
# 030 | <br/> <br/> <label> CODEN: </ label> |) (030a |
# 037 | <br/> <br/> <label> Izvor: </ label> | (037a) (037b) (037c) (037f) (037g) () 037n |
# 010 | <br/> <br/> <label> LCCN: </ label> |) (010a |
# 015 | <br/> <br/> <label> Nat. Bib. No: </ label> | (015a) (0152) |
# 016 | <br/> <br/> <label> Nat. Bib. Agencija za kontrolu broj: </ label> | (016a) (0162) |
# 600 | <br/> <br/> <label> Subjects - Osobna imena: </ label> | (\ n6003) (\ n600a) (600b) (600c) (600D) (600e) (600f) (600g 600h)) ((- 600k) (600l) (600) (600n) () (600o - 600p) (600R) (600s) (600T) () (600u - 600x) (-) (600z -- -600y) (-) 600V |
# 610 | <br/> <br/> <label> Subjects - Corporate Imena: </ label> | (\ n6103) (\ n610a) (610b) (610c) (610d) (610e) (610f) (610g 610h)) ((- 610k (610l)) (610m) (610n)) ((610o - 610p) 610r () (610-ih) 610t () () (610u - 610x () - () 610z -- -610y) (-) 610v |
# 611 | <br/> <br/> <label> Subjects - Skup Imena: </ label> | (\ n6113) (\ n611a) (611b) (611c) (611d) (611e) (611f) (611g () () 611h - 611k) 611l () (611m) 611n () () (611o - 611p) 611r () (611s) 611t () () (611u - 611x () - () 611z -- -611y) (-) 611v |
# 630 | <br/> <br/> <label> Subjects - Uniform naslova: </ label> | (\ n630a) 630b () () 630c (630d) 630e () (630f) 630g () () 630h (- 630k) (630l) (630m) (630n) () (630o - 630p) (630r) (630s) () (630t - 630x) (-) (630z - 630y) (- 630v ) |
# 648 | <br/> <br/> <label> Subjects - Kronoloลกki Uvjeti: </ label> | (\ n6483) (\) (n648a - 648x) (-) (648z - 648y) (-- -648v) |
# 650 | <br/> <br/> <label> Subjects - aktuelno Uvjeti: </ label> | (\ n6503) (\ n650a) (650b) (650c) (650d) () (650e - 650x) (-) 650z (-) 650y (-) 650v |
# 651 | <br/> <br/> <label> Subjects - Geographic Terms: </ label> | (\ n6513) (\ n651a) (651b) (651c) (651d) () (651e - 651x) (-) 651z (-) 651y (-) 651v |
# 653 | <br/> <br/> <label> Subjects - Index Terms: </ label> |) (653a |
# 654 | <br/> <br/> <label> Subjects - Facted Index Terms: </ label> | (\ n6543) (\) (n654a - 654b) (- 654x) (-) (654z - 654y) (-) 654v |
# 655 | <br/> <br/> <label> Index Terms--Genre/Form: </ label> | (\ n6553) (\) (n655a - 655b) (-) (655x - 655z) (-) (655y - 655v) |
# 656 | <br/> <br/> <label> Indeks Uvjeti koriลกtenja - Occupation: </ label> | (\ n6563) (\) (n656a - 656k) (-) (656x - 656z) (-- -656y) (-) 656v |
# 657 | <br/> <br/> <label> Indeks Uvjeti koriลกtenja - Funkcija: </ label> | (\ n6573) (\) (n657a - 657x) (-) (657z - 657y) (-- -657v) |
# 658 | <br/> <br/> <label> Indeks Uvjeti koriลกtenja - Curriculum Cilj: </ label> | (\) (n658a - 658b) (-) (658c - 658d) (-) 658v |
# 050 | <br/> <br/> <label> LC klase. No: </ label> |) ((050a / 050b) |
# 082 | <br/> <br/> <label> Dewey klase. No: </ label> |) ((082a / 082b) |
# 080 | <br/> <br/> <label> Univerzalna decimalna klase. No: </ label> | 080a (() () 080x / 080b) |
# 070 | <br/> <br/> <label> National Agricultural Library Poziv na broj: </ label> |) ((070a / 070b) |
# 060 | <br/> <br/> <label> National Library of Medicine Poziv na broj: </ label> |) ((060a / 060b) |
# 074 | <br/> <br/> <label> GPO predmeta broj: </ label> |) (074a |
# 086 | <br/> <br/> <label> Gov Doc. Klasa. No: </ label> |) (086a |
# 088 | <br/> <br/> <label> izvjeลกฤ‡e. No: </ label> |) (088a |
.pre
Ovdje se nalaze poveznice na lokalnu dokumentaciju nastalu u pojedinim ustanovama koje su implementirale i planiraju implementirati Kohu.

Za sad nudimo:

* "Filozofski fakultet u Zagrebu"<http://saturn.ffzg.hr/koha>

Pozivamo i druge ustanove da ovdje stave linkove na svoju dokumentaciju.

Tko nema vlastiti prostor (web ili wiki) za objavljivanje svoje dokumentacije, moลพe otvoriti novi _workspace_ na ovom wikiju.

[Dubrovnik]
Koha CUG (Koha Croatian User Group) je grupa ustanova i pojedinaca zainteresiranih za koriลกtenje, prilagodbu i razvoj knjiลพniฤnog sustava Koha. Osnivaฤki sastanak potencijalnih ฤlanica odrลพan je 03.12.2009. godine, a prisustvovali su mu predstavnici ovih ustanova: Knjiลพnica Filozofskog fakulteta u Zagrebu, Knjiลพnica Instituta Ruฤ‘er Boลกkoviฤ‡, Knjiลพnica Uฤiteljskog fakulteta u Zagrebu - podruลพnica u Petrinji, Knjiลพnica Instituta za migracije i narodnosti, Knjiลพnica Fakulteta elektrotehnike i raฤunarstva. Formalno je osnovana 27. sijeฤnja 2010. kao ekspertna skupina unutar udruge HrOpen, sa sljedeฤ‡im ciljevima:

* okupljanje osoba i institucija zainteresiranih za koriลกtenje prilagodbu i razvoj knjiลพniฤnog sustava Koha
* organiziranje savjetovanja o instalaciji i koriลกtenju Kohe
* odrลพavanje wiki stranica s uputama
* pruลพanje usluge koriลกtenja Kohe na posluลพitelju udruge (Software as a service model)

Na prvom osnivaฤkom sastanku uspostavljena je mailing lista za komunikaciju i wiki stranice (<http://saturn.ffzg.hr/koha-cug>) s informacijama o radu grupe te dokumentacijom i uputama za koriลกtenje Koha knjiลพniฤnog softvera. Dogovoreni su redovni mjeseฤni sastanci grupe i do sad je odrลพano ลกest takvih sastanaka. Teme za sastanke predlaลพu se nekoliko dana prije sastanka ili na samim sastancima i uglavnom su vezane uz tekuฤ‡e aktivnosti kojima se bave ฤlanovi grupe.

U trenutku osnivanja grupe, dvije knjiลพnice su imale aktivne instalacije Koha knjiลพniฤnog softvera (Knjiลพnica Filozofskog fakulteta u Zagrebu i Knjiลพnica Instituta Ruฤ‘er Boลกkoviฤ‡), a do danas su uz podrลกku grupe joลก dvije knjiลพnice krenule s radom (Knjiลพnica Instituta za migracije i narodnosti i Knjiลพnica Biblijskog instituta u Zagrebu). ฤŒlanovi grupe pruลพaju informacije i savjete o Koha softveru svim zainteresiranim knjiลพnicama u Hrvatskoj, a sadrลพaj je namijenjen knjiลพniฤarima i sistem administratorima. Komunikacija se odvija na redovitim sastancima ali i drugim naฤinima komunikacije (e-mail, telefon, chat), naroฤito u sluฤaju kad knjiลพnice nisu u Zagrebu, kao ลกto je to sluฤaj s dvije knjiลพnice Sveuฤiliลกta u Dubrovniku - Knjiลพnica Odjela za ekonomiju i poslovnu ekonomiju i Knjiลพnica Centra za turistiฤku dokumentaciju i informaciju koje su trenutno u probnoj fazi rada.

U ovome trenutku Koha CUG okuplja ustanove koje imaju vlastitu sistemsku podrลกku, a u buduฤ‡nosti se planira razviti centralna instalacija na posluลพitelju udruge, kako bi se pruลพila podrลกka i onim ustanovama koje nemaju moguฤ‡nost instalacije softvera na vlastitim serverima. U narednom periodu, kao i do sada, grupa ฤ‡e biti orijentirana na organiziranje savjetovanja i pisanje dokumentacije na wiki stranicama.

U zagreb, 17.5.2010.
Prvo smo ovaj sastanak pomaknuli sa tjedan dana a sada nemamo ni neke naroฤite teme :-)

^ Za knjiลพniฤare

ฤŒavrljanje

^ Za sistemske knjiลพniฤare

Pokuลกati ฤ‡emo pogledati [SQL reports utf-8 encoding] probleme u MySQL-u, a moลพemo pogledati i kako "ubrzati MySQL"<http://blog.rot13.org/2010/04/mysql_is_slow_did_you_tune_your_settings.html> ili kako izvuฤ‡i podatke iz [MARCXML] zapisa u bazi.
^ SQL

* jednostavan jezik za postavljanje upita u relacijskim bazama
* [SQL joins - vizualna reprezentacija]

^ Koha reports

* "Koha 3.0 dokumnetacija"<http://koha.org/documentation/manual/3.0/reports/referencemanual-all-pages>
* "Koha SQL Report Library"<http://wiki.koha.org/doku.php?id=sql_library>
^^ Katalogizacija

^^ Prikaz podataka u Kohi

* prikaz ISBD - polja 110, 111 i 246

^^ Backup

* mysql dump za bazu
* rsync/tar/cpio za datoteke
* backup takav da sa njega moลพete podiฤ‡i produkcijsku maลกinu u virtualizatoru (vmware, VirtualBox, qemu, kvm...)

> Mislim da ฤ‡emo ovu temu prebaciti za slijedeฤ‡i put, a ovaj puta razgovarati o Koha upgrade-u koji smo upravo proลกli :-)
Komentar "Community Handover IRC Meeting, 2 February 2010"<http://wiki.koha.org/doku.php?id=en:events:meetings:irc_meetings:meetingnotes10feb02>

^^ Zebra

* [Z39.50] server koji koristi koha
* http://wiki.code4lib.org/index.php/Getting_Started_with_Zebra
* Pretvaranje COBISS-a u Z39.50: http://svn.rot13.org/index.cgi/Z3950-HTML-Scraper

^^ IRC

ili kako najlakลกe komunicirati s grupom ljudi u realnom vremenu?
valjalo bi se dogovoriti da otvorimo neki IRC kanal na kojem bi se poruke arhivirale

^^ Osnivanje ekspertne skupine pri HrOpen-u

[2010-01-27]

----

Naลกa malenkost iz Petrinje dolazi pa se vidimo... Lijep pozdrav...

_contributed by {user: tstankovic@vusp.hr} on {date: 2010-02-02 08:02:56 GMT}_
Dohvaฤ‡anje podataka iz MARCXML zapisa u Kohi zahtjeva MySQL server 5.1 koji se nalazi u backports za debian lenny.

Primjeri XPATH upita:

.pre
mysql> SELECT ExtractValue((SELECT marcxml FROM biblioitems WHERE biblionumber=14), '//datafield[@tag="260"]/subfield[@code>="b"]') AS ITEM\G
*************************** 1. row ***************************
ITEM: Z. ล eลกo, 1978.
1 row in set (0.00 sec)
.pre
Prenosim poruku koju je Nicole Engard danas poslala na Koha user listu:

> Hi all,
> Just wanted you to know that there is a new Koha YouTube Group at
> http://www.youtube.com/group/kohails (well not new apparently I
> created it ages ago and never added anything to it)
> It has 26 videos I found on YouTube for Koha - so if I missed any add
> yours - and feel free to join the group
> I also set one up on Vimeo to be fair - but there is only one video on
> there ... http://vimeo.com/channels/kohails
> I have added both of these to the social networking page on the wiki
> as well: http://wiki.koha.org/doku.php?id=kohasocialnetworks
> Thanks
> Nicole

Nisam joลก detaljno pogledala, ลกaljem ovdje da imamo te linkove pri ruci. Neki video materijali odnose se na staru verziju Kohe (2.2), ali vidim da ima dosta toga za novu verziju.
Za reporte iz Koha baze nuลพno je koristiti `join` u SQL-u. Evo ลกalabahtera:

{image: Visual_SQL_JOINS_orig.jpg}

*izvori*:

* http://koha-community.org/help-with-sql-joins/
* http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx
Naziv: Korisnici Koha knjiลพniฤnog softvera

Engleski naziv: Croatian Koha user group

^^ Podruฤje djelovanja

* okupljanje osoba i institucija zainteresiranih za koriลกtenje prilagodbu i razvoj knjiลพniฤnog sustava Koha
* organiziranje savjetovanja o instalaciji i koriลกtenju Kohe
* odrลพavanje wiki stranica s uputama
* pruลพanje usluge koriลกtenja Kohe na posluลพitelju udruge (_Software as a service_ model)

^^ Potrebni resursi

Pruลพanje usluge koriลกtenja Kohe na centranom posluลพitelju zatjeva hardverske resurse (Debian Linux operacijski sustav, MySQL baza podatka, Zebra pretraลพivaฤ). Iako trenutno ne posoji interes za takvu uslugu, poznato je da mnoge manje knjiลพnice nemaju moguฤ‡nost samostalne instalacije i odrลพavanja Kohe, pa bi takva usluga mogla biti zanimljiva u buduฤ‡nosti.

Koha podrลพava viลกe razliฤitih kniลพnica na jednoj instalaciji i zahtjeva relativno male resurse (oko 1Gb RAM-a i oko 200 Gb mjesta na disku), i radi dobro kao virtualni stroj ili container.

----

Prvi sastanak potencijalnih ฤlanica i ฤlanova ove grupe odrลพan je 3.12.2009. u 12:00 sati u raฤunalnoj uฤionici Knjiznice FF-a.

----

{include: [2010-01-27]}
Problem: 
*treba pobrisati sve bibliografske zapise na kojima nema niti jednog primjerka*.

^^^ Uz pomoฤ‡ skripte

`scrub_orphaned_biblios.pl`

(dodati link na izvor za ovu skriptu !!)

isprobali na koha-dev.rot13.org, ne radi.

ova skripta bi trebala uredno pobrisati zapise, tako da ih sve pospremi u tablice `deletedbiblio` i `deletedbiblioitems`
takoฤ‘er, trebala bi neลกto uฤiniti sa zebra indeksima.
koristi koha modul C4::Biblio

^^^ Ruฤno

moลพe i ovako, ali tako niลกta neฤ‡e ostati u deleted* tablicama (ลกto je ponekad poลพeljno)

uฤ‘i u bazu:

.pre
$ mysql -u _kohauser_ -p  koha
.pre

izlistaj sve biblionumbere koje treba obrisati, ovako:

.pre
mysql> SELECT biblio.biblionumber, biblioitems.itemtype, items.biblionumber as items_biblionumber 
from biblio 
RIGHT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber 
LEFT JOIN items ON biblio.biblionumber = items.biblionumber 
WHERE items.biblionumber IS NULL ;
.pre

zapoฤni transakciju:

.pre
mysql> begin ;
.pre

obriลกi zapise:

.pre
mysql> delete biblio.* from biblio LEFT JOIN items ON biblio.biblionumber = items.biblionumber WHERE items.biblionumber IS NULL ;
.pre

pa onda provjeri, npr. ponovo napiลกi onaj gore select, prebroji koliko sada ima zapisa u tablicama items,biblio i bilioitems i sliฤne stvari..

.pre
mysql> select count(*) from biblio ;
.pre

nakon toga potvrdi promjene:

.pre
mysql> commit;
.pre

onda treba rebuld zebra indeksa:

.pre
koha@koha-dev:/usr/share/koha/bin/migration_tools$ ./rebuild_zebra.pl -b -a -v -r
.pre
{toc: }

^ ฤŒemu sluลพi MARC bibliographic framework?

Sluลพi za konfiguraciju suฤelja za unos bibliografskih podatka pri katalogizaciji --- {link: koha [Katalogizacija] }

Podrลพani standardi: UNIMARC i MARC21. Iskustva u HR postoje za MARC21.

Definiranje MARC predloลพaka kljuฤni je proces tijekom implementacije. Prije poฤetka rada obavezno je pokrenuti *MARC Bibliographic framework test*.

Omoguฤ‡uje:

* difiniranje potrebnih MARC polja i potpolja
* prikaz polja u formi za unos
* definiranje default vrijednosti
* mapiranje polja u koha bazu
* koriลกtenje alata za normiranje podataka i dodataka koji olakลกavaju toฤan unos podataka

^ Upute za konfiguraciju

`Koha administration -> MARC Bibliographic framework`

* "Koha User Manual"<http://koha.org/documentation/manual/3.2/administration/catalog-administration/marc-bibliographic-frameworks>

^ Zaลกto ลพelimo imati iste predloลกke?

*1. opฤ‡eniti razlog - standardi*

Standardizirani unos podataka olakลกava razmjenu podataka

*2. Koha specifiฤan razlog:*

Moguฤ‡nost razmjene SQL upita za potrebe razliฤitih izvjeลกtaja.

Koha wiki: http://wiki.koha.org/doku.php?id=sql_library

Sastavni dio predloลกka su mapiranja MARC polja u Koha bazu. U Koha bazi ne nalaze se sva MARC polja, nego samo ona koja smo mapirali.
Interne funckije u Kohi (npr. cirkulacija, reporting) odvijaju se uz pomoฤ‡ podataka u Koha bazi. 
Prikaz podataka nije limitiran mapiranjem, ali do verzije 3.2 nije postojala elegantna metoda za dodavanje polja za display u intranetu, pa je display u intranetu bio limitiran na polja iz baze. Od verzije 3.2 postoji "Keywords to MARC mapping"[Prikaz podataka u intranetu - Keywords to MARC mapping].

^ Kako importati framework?

Trebaju nam:

a) *podaci* koji se nalaze u tablicama:
`biblio_framework`
`marc_tag_structure`
`marc_subfield_structure`

b) *plugini* za unos podataka (_value builder_).

^^ 1. backup lokalnih tablica

.pre
$ mysqldump --add-drop-table -u _root_ -p_password_ koha marc_tag_structure > 2009-12-10_marc_tag_structure.sql
$ mysqldump --add-drop-table -u _root_ -p_password_ koha marc_subfield_structure > 2009-12-10_marc_subfield_structure.sql
.pre

^^ 2. download

* {link: koha [FFZG MARC frameworks] }

^^ 3. napraviti framework

Preko Koha admin suฤelja:

Administration -- MARC Bibliographic framework -- New Framework

upisati Framework Code i Description

Pod frameworkcode piลกe se kod koji odgovra kodu frameworka koji se zeli importati.

Npr. za LIB framework preuzet s FFZG, treba upisati LIB. Description moลพe biti bilo ลกta.

Ako se stavi neลกto drugo pod frameworkcode onda u preuzetim fajlovima treba LIB promijeniti u to neลกto drugo.

^^ 4. import podataka

.pre
mysql> LOAD DATA LOCAL INFILE '/tmp/mysql/lib-tags.csv' 
INTO TABLE marc_tag_structure
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'  
LINES TERMINATED BY '\n' ;

mysql> LOAD DATA LOCAL INFILE '/tmp/mysql/lib-subfields.csv' 
INTO TABLE marc_subfield_structure 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'  
LINES TERMINATED BY '\n' ;
.pre

----

Ako neลกto poฤ‘e krivo, ovo ฤ‡e rekreirati originalne podatke u tablicama:

.pre
$ mysql -u _root_ -p_password_ koha.marc_tag_structure < 2009-12-10_marc_tag_structure.sql
$ mysql -u _root_ -p_password_ koha.marc_subfield_structure < 2009-12-10_marc_subfield_structure.sql
.pre

^^ 5. provjeriti i promijenti default vrijednosti

Koha Administration -> MARC Bibliographic framework

Preuzeti podaci sadrลพe default vrijednosti koje se odnose na ustanovu iz koje su podaci za framework preuzeti.

.pre
mysql> select tagfield, tagsubfield, liblibrarian, mandatory, frameworkcode, defaultvalue from marc_subfield_structure where defaultvalue = 'HR-ZaFF' ;
+----------+-------------+-----------------------------------------------+-----------+---------------+--------------+
| tagfield | tagsubfield | liblibrarian                                  | mandatory | frameworkcode | defaultvalue |
+----------+-------------+-----------------------------------------------+-----------+---------------+--------------+
| 040      | a           | Srediลกte koje obavlja izvornu katalogizaciju |         0 | LIB           | HR-ZaFF      | 
| 040      | c           | Srediลกte koje transkribira zapis             |         1 | LIB           | HR-ZaFF      | 
| 040      | a           | Srediลกte koje obavlja izvornu katalogizaciju |         0 | MIN           | HR-ZaFF      | 
| 040      | c           | Srediลกte koje transkribira zapis             |         0 | MIN           | HR-ZaFF      | 
| 040      | a           | Srediลกte koje obavlja izvornu katalogizaciju |         0 | OCJ           | HR-ZaFF      | 
| 040      | c           | Srediลกte koje transkribira zapis             |         1 | OCJ           | HR-ZaFF      | 
| 040      | a           | Srediลกte koje obavlja izvornu katalogizaciju |         0 | PER           | HR-ZaFF      | 
| 040      | c           | Srediลกte koje transkribira zapis             |         1 | PER           | HR-ZaFF      | 
+----------+-------------+-----------------------------------------------+-----------+---------------+--------------+
8 rows in set (0.05 sec)
.pre

^^ 6. instalirati _value builder_

_Value builder_ dolazi u obliku plugina. Olakลกava unos podataka i osigurava toฤnost unesenih podataka.

Redovito se koristi za unos kodiranih podataka (polje LDR, 008, i sl), ali moguฤ‡e ga je kristiti za razliฤita druga poboljลกanja forme za unos podataka.

*Download*: {link: koha [FFZG MARC frameworks plugins] }

Gdje se se moraju smjestiti dateteke plugina?

Template: `/usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/modules/cataloguing/value_builder/`
Skripta: `/usr/share/koha/intranet/cgi-bin/cataloguing/value_builder/`

Vidi i:

* [Pisanje Koha plugina]

^^ 7. premapirati polja (opcionalno)

Nakon toga treba obavezno pokrenuti skriptu *batchRebuildBiblioTables.pl*

.pre
mglavica@koha-upgrade:/srv/koha/misc$ ./batchRebuildBiblioTables.pl -h
This script rebuilds the non-MARC DB from the MARC values.
You can/must use it when you change your mapping.

Example: you decide to map biblio.title to 200$a (it was previously mapped to 610$a).
Run this script or you will have strange results in OPAC !

Syntax:
        ./batchRebuildBiblioTables.pl -h (or without arguments => shows this screen)
        ./batchRebuildBiblioTables.pl -c (c like confirm => rebuild non marc DB (may be long)
        -t => test only, change nothing in DB
.pre

Ova skripta rekreira non-MARC DB iz MARC vrijednosti. Obavezno ju je pokreniti nakon svake promjene u mapiranju polja.
Ako se ne pokrene u OPAC-u ฤ‡e se pojaviti ฤudni rezultati.

Ova skripta ฤ‡e rekreirati samo polja u biblio zapisu (sve osim podataka u 952, odnosno u items tablici). Master verzija podataka o primjercima nalazi se u items tablici.

Ako neลกto mijenjamo u polju 952, pokreฤ‡e se skripta
*`maintenance/sync_items_in_marc_bib.pl`*

*Ne pokretati* ovu skriptu ako nije nuลพno!

.pre
mglavica@koha-upgrade:/srv/koha/misc/maintenance$ ./sync_items_in_marc_bib.pl -h
./sync_items_in_marc_bib.pl: synchronize item data embedded in MARC bibs

Replaces the item data embedded in the MARC bib 
records (for indexing) with the authoritative 
item data as stored in the items table.

If Zebra is used, run rebuild_zebra.pl -b -r after
running this script.

NOTE: this script should be run only if there is
reason to suspect that the embedded item tags are
not in sync with the items table.

Parameters:
    --run-update            run the synchronization
    --where condition       selects the biblios on a criterium (Repeatable)
    --help or -h            show this message.
.pre

^^ 8. testirati

U Admin suฤelju intraneta:

* pokrenuti `MARC Bibliographic framework test`
* pogledati `MARC links`

^ ล to ako test javi greลกke?

primjer:

.pre
OK      itemnum : the field itemnumber is mapped to a field in tab -1
item fields     ALL items fields MUST :

   * be mapped to the same tag,
   * and they must all be in the 10 (items) tab

OK      Only 1 MARC tag mapped to items
OK      biblioitems.itemtype defined
OK      homebranch defined
OK      holdingbranch defined
OK      at least 1 item type defined
OK      at least 1 branch defined
OK      biblionumber and biblioitemnumber mapped correctly
OK      no NULL value in frameworkcode
OK      all subfields for each tag are in the same tab (or ignored)
OK      all authority types used in the frameworks are defined
TOTAL   You have 1 error(s) in your MARC configuration. Please fix them before using Koha
.pre

Ovo ฤ‡e pokazati u koja MARC polja (tagfield) i potpolja (tagsubfield) su mapirana polja iz items tablice, za svaki framework.
^ Reineksiranje Zebre bez zebra-queue

.pre
KOHA_CONF=/etc/koha/koha-conf.xml
PERL5LIB=/usr/share/koha/lib

# m h dom mon dow command

*/4* * * * ps ax | grep -v grep | grep rebuild_zebra.pl || /srv/koha/misc/migration_tools/rebuild_zebra.pl -b -z >/dev/null
.pre
^^ Kako aลพurirati Zebra index

Nakon veฤ‡ih promjena u bazi ili MARC zapisu, potrebno je reindeksirati zebra index kako bi se promjene reflektirale i u rezultatima pretraลพivanja u web suฤelju.

Treba jednostavno izbrisati postojeฤ‡e index fajlove i kreirati nove:

.pre
zebraidx -c /etc/koha/zebradb/zebra-biblios.cfg -g iso2709 -d biblios init
zebraidx -c /etc/koha/zebradb/zebra-authorities-dom.cfg -g iso2709 -d authorities init
.pre

i onda

.pre
migration_tools/rebuild_zebra.pl -a -b -k -s โ€“reset
.pre

Opฤ‡enito kod generiranja zebra indexa pripazite da imate dovoljno mjesta na fajlsistemu (defaultni direktorij je /var/lib/koha/zebradb) jer ฤ‡e u protivnom doฤ‡i do greลกke. Nama na IRB trosi oko 1GB prostora (za 25000 zapisa).

^ Cron

[Koha cronjobs]

----

_Vidi i:_ {link: koha [Zebra indexing]}
Na sastanku upravnog odbora HrOpen-a uvojena je odluka o formiranju ekspertne skupine za Kohu.

Dakle, sada imamo i formalni organizacijski oblik :-)
Predloลพene teme:

* [MARC bibliographic framework]

* [git] - kako ga efikasno koristiti za praฤ‡enje promjena
Odrลพan je prvi sastanak potencijalnih ฤlanica i ฤlanova ove grupe u 12:00 sati u raฤunalnoj uฤionici Knjiznice FF-a.
{tag_list: uloga:sistemski-knjiลพniฤar}

{tag_list: uloga:knjiลพniฤar}
LiveCD vam omoguฤ‡uje da racunalo pokrenete uz pomoฤ CD-a i isprobate operativni sustav bez da ga morate instalirati i konfigurirati. Takav CD, uz operativni sustav moลพe sadrลพavati bilo koji softver kojeg tvorac CD-a odluฤi ukljuฤiti.

Mizstik je sloลพio live CD s Ubuntu serverom i instalacijom Koha knjiลพniฤnog softvera i nazvao ga Koha LiveCD. Uz pomoฤ‡ Koha LiveCD-a moลพete instalirati Kohu ili ju samo isprobati iz RAM-a, bez da ju instalirate.

Adresa projekta je <http://mizstik.com/projects/koha-livecd/>.
* dodano u verziji *3.2*

{toc: }

^^ ฤŒemu sluลพi Keywords to MARC mapping?

Ovo je veliko poboljลกanje u naฤinu prikaza podataka u intranetu (testirati OPAC) u sluฤaju kad display nije definiran uz pomoฤ‡ XSLT.

Omoguฤ‡uje prikazivanje bilo kojeg polja iz MARC formata, a ne samo onih polja koja su mapirana u Koha bazu.

^^ Kako se koristi?

U admin suฤelju intraneta, za svaki framework se odrede kljuฤne rijeฤi uparene s pojedinim MARC poljima.

Nakon toga se dodaju potrebna polja u ove dvije datoteke:

`/usr/share/koha/intranet/cgi-bin/catalogue/detail.pl`
`/usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl`

^^ Primjer za dodavanje podataka o odgovornosti (MARC 245c)

dodati varijablu responsibility:

.pre
mglavica@koha-upgrade:/usr/share/koha/intranet/cgi-bin/catalogue$ diff -u detail.pl-before detail.pl
--- detail.pl-before    2009-12-08 22:45:28.740439368 +0100
+++ detail.pl   2009-12-08 21:26:47.280689653 +0100
@@ -90,6 +90,7 @@
 my $marcseriesarray  = GetMarcSeries($record,$marcflavour);
 my $marcurlsarray    = GetMarcUrls    ($record,$marcflavour);
 my $subtitle         = GetRecordValue('subtitle', $record, $fw);
+my $responsibility   = GetRecordValue('responsibility', $record, $fw);
 
 # Get Branches, Itemtypes and Locations
 my $branches = GetBranches();
@@ -206,6 +207,7 @@
        MARCSERIES  => $marcseriesarray,
        MARCURLS => $marcurlsarray,
        subtitle    => $subtitle,
+       responsibility => $responsibility,
        itemdata_ccode      => $itemfields{ccode},
        itemdata_enumchron  => $itemfields{enumchron},
        itemdata_uri        => $itemfields{uri},
.pre

u template dodati:

.pre
    <!-- TMPL_LOOP NAME="responsibility" --> 
       <!-- TMPL_VAR NAME="subfield" -->
    <!-- /TMPL_LOOP --> 
.pre
{toc: }

^ Format broja

Odabran je 10-tero znamenkasti broj (3+7 znamenki)

.pre
III1234567
.pre

* III - zadnje tri znamenke iz broja ministarstva
** 130 - Filozofski fakultet
** 098 - Institut Ruฤ‘er Boลกkoviฤ‡
* 1234567 = oznaka primjerka

7 zmaneki omoguฤ‡ava omoguฤ‡ava 9,999,999 primjeraka po ustanovi, a troznamenkasni prefix je odabran jer Crolist veฤ‡ koristi dvije znamenke za ustanovu i 7 za primjerak (ukupno 9 znamenki), pa je moguฤ‡e razlikovati barcode iz Crolista od barcoda iz Kohe prema broju znamenki

^ Barcode standardi

Nadopisati lijepi opis, a do tada, {link: rot13 [Barcode journy] } opisuje Dobricine eksperimente sa barcode softverom.

^ Iskustva sa opermom

* Zebra barcode printer
{toc: }

^ Gdje se koriste plugini?

Koha plugin je funkcionalnost skrivena iza lika `...` (tri toฤkice) u poljima za editiranje:

{image: koha-tag-editor.png}

Plugin je u osnovi pop-up prozor koji se otvara klikom na link i koji moลพe vratiti podatke u polje iz kojeg je otvoren.

^ Dijelovi

Sastoji se od dvije datoteke:

* "cataloguing/value_builder/ffzg-signatura-zatvoreno-spremiste.pl"<http://koha-dev.rot13.org:8081/cgi-bin/gitweb.cgi?p=koha-ffzg.git;a=blob;f=cataloguing/value_builder/ffzg-signatura-zatvoreno-spremiste.pl;h=c54a0b33a9a29cc769bcfc760bcd835437d8542c;hb=ff60f4a71d8aca3ae247ab5615c7224da308b599>
* "koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/ffzg-signatura-zatvoreno-spremiste.tmpl"<http://koha-dev.rot13.org:8081/cgi-bin/gitweb.cgi?p=koha-ffzg.git;a=blob;f=koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/ffzg-signatura-zatvoreno-spremiste.tmpl;h=d1bafae5c5c555d13919b543c2641519bf14e54d;hb=ff60f4a71d8aca3ae247ab5615c7224da308b599>

^ Instalacija

https://10.60.0.252:8443/cgi-bin/koha/admin/marc_subfields_structure.pl

{image: koha-subfield-display_more_constraints.png}

{image: koha-subfield-other-options-plugin.png}

^ Editiranje

Ako se plugin editira u koha checkout direktoriju `/srv/koha` treba ga prvo instalirati na sistem:

.pre
cp -v ./koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/ffzg-signatura-zatvoreno-spremiste.tmpl \
       /usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/modules/cataloguing/value_builder/

cp -v ./cataloguing/value_builder/ffzg-signatura-zatvoreno-spremiste.pl \
       /usr/share/koha/intranet/cgi-bin/cataloguing/value_builder/
.pre

http://koha-dev.rot13.org:8081/cgi-bin/gitweb.cgi?p=koha-ffzg.git;a=blob;f=ffzg-signatura-zatvoreno-spremiste.sh;h=ec124c67830420273483e60ce0eea81720c72c1d;hb=ff60f4a71d8aca3ae247ab5615c7224da308b599
{image: koha-cug-gray.png}

{image: koha-cug.png}

{file: koha-cug-2009-11-15.svg}

Stilizirana sliฤica vlaka sa natpisom Koha i oblaฤiฤ‡ima sa loga
Up: [Workspace Tour - Table of Contents]
Back: [Meeting agendas]

Share information about projects and tasks with your team.

| ^^^ Widget project summary

^^^^ Recent Updates

11-14-05: Added the Top 5 Requirements
11-14-05: Added a draft of an [Evaluation document]

^^^^ Widget Development Tasks

10-22-2005 100% [Integrated Top 5 Requirements]
10-29-2005 095% [Requirements for Widget]
10-31-2005 080% [Evaluation Document] |

... you can use pages in a Workspace to build "collections of pages"[lists of pages]...
Up: [Workspace Tour - Table of Contents]
Back: [Documents that people are working on]

Here's an example of what a conversation page might look like...

| ^^^ Group-forming metrics

[Adina] - I spoke this afternoon to Anil Gupta over at CyberProteins, Inc. They are interested in the groupforming metrics reports, and are interested in additional metrics about network growth.

[Ed] - It would also be useful to configure these reports more rapidly in the field. We should also consider think about providing services helping customers to choose and implement the right metrics. I'll bring this up at the next business-plan meeting. |

Follow us to see how you can use workspace pages for [meeting agendas]...
This is the people directory, a list of people working in this workspace. It is built by you, as a place to [introduce yourself]. Please add yourself below and then create your own homepage.
>> *Find out more: [Introduce yourself].*


* _[your name here]_ (e.g. [John] or [Jane Doe])

----

*Meet your fellow socialtext users.* You're not alone! Meet other Socialtext customers and support representatives on the {link: exchange [Socialtext Customer Exchange]}. If you have a question, this is the place to go.
Up: [Workspace Tour - Table of Contents]
Back: [How Do I Make a New Page?]

You're now ready to use your workspace! Now, think about how you want to use it for you and your workgroup, and start creating and editing pages.

To start, you might want to create a personal page for yourself. Just visit the dashboard and click the *New Page* button. Or, you can start with any other page you'd like.

For more ideas, check out the collection of "Best Practices"<http://www.socialtext.net/exchange/index.cgi?best_practices> over at the "Socialtext Customer Exchange"<http://www.socialtext.net/exchange/>.

Enjoy!

_The Socialtext Crew_
Up: [Workspace Tour - Table of Contents]
Back: [Lists of pages]

* *"Home"* at the top left sends you to the dashboard or to the top page.
>> {image: Navbar-Home.png}


* *Click links* to browse around through the pages.

* Click *"What's new"* right next to *"Quick jump"* to see what's new and what has recently changed in the space.
>> {image: View-Page-What's-new.png}


* *Search* from the top left to find pages with specific words in them.
>> {image: Search.png}

Let's look at some more [advanced getting around]
Up: [Workspace Tour - Table of Contents]
Back: [Project plans]

Here are links to some of the pages in this workspace.

| ^^^ Things you might find in a workspace

> [Meeting Agendas]
> [Project Plans]
> [Conversations] |

Now that I know about some of the things I can use a Workspace for, [how do I find my way around?]
Up: [Workspace Tour - Table of Contents]
Back: [How do I find my way around?]

Here are some more advanced workspace navigation techniques. If you like, you can go back to the basic page, called [How do I find my way around?]

You can use tags to group pages that are related. Anyone can put a tag on a page by clicking the *Add tag* button in the sidebar. You can find pages with a given tag by clicking the tag if it appears in the sidebar, or by going to the dashboard, then clicking on the *"All tags"* link.
>> {image: Navbar-All-tags.png}

Next: [Can I change something?]