Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
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.
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<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 class="socialtextLogo"><img src="http://www.eu.socialtext.net/static/2.3.0.0/images/st/logo/socialtext-logo-152x26.gif" width=152 height=26></div>
</div>
<!--}}}-->
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" wikiformat:socialtext'>><<newJournal 'DD MMM YYYY' fields:'server.host:"https://saturn.ffzg.hr%2C%20saturn.ffzg.hr:443" server.workspace:"koha" wikiformat:socialtext'>><<saveChanges>><<backstage sync>><<slider chkSliderOptionsPanel OptionsPanel 'options ยป' 'Change TiddlyWiki advanced options'>>
https://saturn.ffzg.hr/koha/
[[SocialtextScreenStyle]]
[[SocialtextStyleOverrides]]
[[Styles HorizontalMainMenu]]
@@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|
|''WorkspaceList:''||
|''Description:''|KOHA|
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&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 = '™';
}
},
{
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");
}
//}}}
> *slobodni softver za podrลกku knjiลพniฤnom poslovanju*
^^ Dokumentacija o implementaciji "Koha"<http://koha-community.org/> softvera u "Knjiลพnici FFZG"<http://knjiznica.ffzg.unizg.hr>
{section}
^^^ MODULI
* [Korisnici]
* [Cirkulacija graฤe]
* [Katalogizacija]
* [Katalozi]
* [Periodika]
* [Nabava]
^^^ PODACI
* "Konverzija podataka"<http://saturn.ffzg.hr/konverzija>
* "Migracija bibliografskih podataka"[Migracija podataka]
* [Podaci na korisniฤkim karticama]
* [Greลกke u podacima]
^^^ INTEGRACIJA S DRUGIM SUSTAVIMA
* [Pregled sustava] - Koha je povezana s joลก nekoliko softverskih sustava u "Knjiลพnici"<http://knjiznica.ffzg.unizg.hr> i u matiฤnoj ustanovi "Filozofskom fakultetu u Zagrebu"<http://www.ffzg.unizg.hr/>
* [Fotokopirni strojevi]
* [RFID sustav] - manipulacija i zaลกtita
* [Knjiลพniฤne Web stranice]
^^^ DOKUMENTACIJA I ZAJEDNICA KORISNIKA
* pretraลพivanje mailing lista: http://www.google.com/cse/home?cx=012030839526267669208:c5r4yzaftug
* "Koha dokumentacija i zajednica korisnika"[Dokumentacija i zajednica korisnika]
* [Prijevodi]
^^^ EDUKACIJA
* *[UPUTE]* za knjiลพniฤare
* [Edukacija] za vrijeme implementacije
{section}
| The word Koha is a maori word meaning gift or donation - or perhaps more "giving your specialty to the collective event". |
{include: koha-cug [prijevodi]}
^ FFZG lokalne promjene
nakon preuzimanja datoteke s koha-translate stranice, treba pokrenuti:
./translate update hr-HR
nakon toga popraviti ovo u hr-HR-i-opac-t-prog-v-3006000.po
.pre
#: opac-tmpl/prog/en/modules/opac-results.tt:445
#, c-format
msgid "Available for loan:"
msgstr "Dostupno za posudbu: "
#: opac-tmpl/prog/en/xslt/MARC21slim2OPACResults.xsl:1000
#, c-format
msgid "Available for use in library: "
msgstr "Dostupno za rad u ฤitaonici: "
#: opac-tmpl/prog/en/modules/opac-results.tt:504
#, c-format
msgid "Log in to add tags and create lists."
msgstr "Prijavite se ako ลพelite dodati tagove ili izraditi popis."
#: opac-tmpl/prog/en/xslt/MARC21slim2OPACDetail.xsl:515
#, c-format
msgid "Responsiblity: "
msgstr "Odgovornost: "
#: opac-tmpl/prog/en/modules/opac-detail.tt:404
#: opac-tmpl/prog/en/modules/opac-detail.tt:408
#, c-format
msgid "Tags from this library:"
msgstr "Tagovi:"
#: opac-tmpl/prog/en/modules/opac-results.tt:468
#, c-format
msgid "No items available for loan:"
msgstr "Nema slobodnih primjeraka za posudbu: "
#: opac-tmpl/prog/en/modules/opac-sendbasket.tt:5
#, c-format
msgid ""
"Hi, %s %s (%s) sent you a cart from our online catalog. Please note that the "
"attached file is a MARC bibliographic records file which can be imported "
"into a Personal Bibliographic Software like EndNote, Reference Manager or "
"ProCite. "
msgstr ""
"Pozdrav, %s %s (%s) vam ลกalje popis iz knjiลพniฤnog kataloga. U privitku se "
"nalaze bibliografski zapisi u MARC formatu spremni za uฤitavanje u osobni "
"bibliografski softver kao ลกto je EndNote, Reference Manager ili ProCite. "
#: opac-tmpl/prog/en/modules/opac-user.tt:87
#, c-format
msgid ""
"Your account will expire on %s. If you use AAI@EduHR account please contact "
"the IT Services Department. If not, please contact the Library."
msgstr ""
"Vaลก korisniฤki raฤun istiฤe %s. Ako koristite AAI@EduHR raฤun, molimo "
"kontaktirajte Sluลพbu za informatiku. Ako vaลก raฤun nije AAI, obratite se u Knjiลพnicu."
pre
{toc: }
^ Upute
* {link: koha-cug [MARC Bibliographic framework] } (Koha CUG)
* "Koha User Manual"<http://koha.org/documentation/manual/3.2/administration/catalog-administration/marc-bibliographic-frameworks>
^ Kako napraviti export
Ako user na bazi nema potrebne ovlasti, kao root user treba prvo napraviti ovo:
.pre
mysql -u root koha
mysql>grant file on koha.* to 'kohaadmin'@'localhost';
.pre
a onda napraviti exprort:
.pre
select * into outfile '/tmp/mysql/lib-tags.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' from marc_tag_structure where frameworkcode = 'LIB' ;
select * into outfile '/tmp/mysql/lib-subfields.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' from marc_subfield_structure where frameworkcode = 'LIB' ;
.pre
^ Export FFZG tablica
^^ LIB framework - Koha verzija 3.01.00.100
Koristi se za katalogizaciju knjiga
* {file: lib-tags.csv}
* {file: lib-subfields.csv}
^^ PER framework - Koha verzija 3.01.00.145
Koristi se za katalogizaciju ฤasopisa
* {file: per-tags.csv}
* {file: per-subfields.csv}
^ Plugins
[FFZG MARC frameworks plugins]
>> *UPUTE SU PRESELJENE NA http://saturn.ffzg.hr/knjiznica/*
^ OBRADA PRIMJERAKA (ITEM)
* [Upute za ฤipiranje]
* [Dodavanje primjerka]
* [Djela sa viลกe svezaka]
* [Upute za printanje naljepnica]
* [Izgubljeni primjerci]
* [Primjerci za otpis]
* [Primjerci za uvez]
* [Signiranje za OP]
* [Signiranje za ZS]
^ KATALOGIZACIJA
* [ORIGINALNA KATALOGIZACIJA]
* [DUPLICIRANJE ZAPISA] - Edit as new (Duplicate)
* [PREUZIMANJE ZAPISA]
* [Sakrivanje zapisa u javnom katalogu]
* [BRISANJE ZAPISA]
* [Spajanje zapisa]
* [UPUTE ZA MINIMALNI ZAPIS KNJIGE]
* [MARC21 upute - monografije]
* [MARC21 upute ฤasopisi]
* [MARC21 upute analitika]
* [Djela u viลกe svezaka]
* [Obrada diplomskih radnji, disertacija i magistarskih radnji]
* [Obrada nakladniฤkih cjelina]
* [Unos znakova za razliฤite jezike]
* [MARC 21 tablice kodova]
^ BARATANJE POPISIMA
* {file: Kako dodati zapis na popis.doc}
^ POSUDBA I KORISNICI
* [Upis korisnika]
* [AAI korisnicki racuni]
* [Anonimnost korisnika]
* [Zaduลพivanje i razduลพivanje graฤe]
* "Pravila posudbe"[Posudba]
* [Cirkulacija ฤasopisa]
* [Cirkulacija knjiga iz Zatvorenog spremiลกta]
----
_vidi i:_ [UPUTE ZA KORISNIKE]
^ Instalacija zpl printera na Windowse
Nova verzija printanja koristi Koha Spine Label printanje i zahtjeva instalaciju Zebra printera na Windowsima prema
uputama na https://github.com/dpavlin/Printer-Zebra/blob/master/README
^^ Video instalacije
.html
<iframe width="560" height="315" src="http://www.youtube.com/embed/DMEo8rz-zo0?rel=0" frameborder="0" allowfullscreen></iframe>
.html
{section}
[Upute za instalaciju Zebra printera / Vivainfo]
Pritanje signatura zahtjeva "ODBC driver za MySQL"<http://dev.mysql.com/downloads/connector/odbc/> i korisnika na bazi sa kojim ฤe se spajati program.
Nazivi korisnika:
* printer_zs - Zatvoreno spremiลกte
* printer - svi ostali printeri, migrirati na nazive
Dodavanje korisnika u MySQL:
.pre
dpavlin@koha:~$ mysql -u root mysql
mysql> create user printer_zs identified by 'password_za_ovaj_account' ;
Query OK, 0 rows affected (0.01 sec)
mysql> grant select,insert on koha.items_print_log to 'printer_zs' ;
Query OK, 0 rows affected (0.15 sec)
mysql> grant select on koha.items to 'printer_zs' ;
Query OK, 0 rows affected (0.00 sec)
mysql> grant select on koha.biblio to 'printer_zs' ;
Query OK, 0 rows affected (0.00 sec)
.pre
Passwordi za printere nalaze se na zaลกtiฤenom wiki-ju: {link: ffzg-sysadmin [Zebra printer] }
Provjera:
.pre
mysql> select * from tables_priv ;
+------+------+------------+-----------------+----------------+---------------------+---------------+-------------+
| Host | Db | User | Table_name | Grantor | Timestamp | Table_priv | Column_priv |
+------+------+------------+-----------------+----------------+---------------------+---------------+-------------+
| % | koha | printer | items_print_log | root@localhost | 2009-03-27 12:12:17 | Select,Insert | |
| % | koha | printer | items | root@localhost | 2009-03-27 12:14:38 | Select | |
| % | koha | printer | biblio | root@localhost | 2009-03-27 12:15:03 | Select | |
| % | koha | printer_zs | biblio | root@localhost | 2010-03-09 14:26:30 | Select | |
| % | koha | printer_zs | items | root@localhost | 2010-03-09 14:26:24 | Select | |
| % | koha | printer_zs | items_print_log | root@localhost | 2010-03-09 14:26:19 | Select,Insert | |
+------+------+------------+-----------------+----------------+---------------------+---------------+-------------+
6 rows in set (0.00 sec)
.pre
Stare biljeลกke:
> Iz tablice `items_print_log` obnoviti podatak `items.datelastseen`.
POKRENE SE INSTALACIJA PRINTERA SA PrnInstZBR.exe
ODABERE SE PROIZVOรAฤ ZDesigner (jedini na lijevom spisku)
odabere se model ZDesigner S4M-203dpi ZPL
hardversko podeลกavanje na samom printeru
tipka menu
DARKNESS: 15,2
TEAR OFF: 0
LABEL TOP: 0
LEFT POSITION: 0
MEDIA TYPE: MARK
SENSOR SELECT: REFLECTIVE
REMOVAL: TEAR
PRINT SPEED: 4 IPS
PRINT WIDTH: 831
LENGH: AUTO
ADVANCED: SETUP 3
ponov tipka menu, save changes: yes
tipka enter
softversko podeลกavanje u windowsima
control panel
printers & faxes
odaberemo ZDesigner S4M-203dpi ZPL
desnim miลกem i postavimo ga za default
desnim miลกem i properties
na strani general kliknemo dugme printig preferences
na tabu opcije
broj kopija: 1
brzina: 10,1
zatamnjenje: 0
format papira: user defined
format papira: mjere: cm
format papira: orijentacija: portrait
veliฤina: ลกirina 10,5
visina: 4,10
zona koja se NE moลพe tiskati
lijevo: 0
desno: 0,10
gore: 0
dolje: 0
na tabu zahtjevni parametri
naฤin rada: otkidanje
naฤin izbacivanja: termo
Senzor: senzor trake
poravnanje
gore: 0
otkidanje: 0
lijevi pomak: 0
klik na kalibracija.
^^ Pripreme
Na staroj produkciji pokrenuti
`sync_items_in_marc_bib.pl`
`rebuid_zebra.pl`
bibs wiht errors (corrupted)
248612
249478
250682
251126
251127
251128
253059
253170
253916
262292
268925
269096
269097
269099
269101
269102
^^ Koha sysadmin
* ukljuฤiti Amazon covers za intranet
* XSLT za sve osim za intranet results
*frameworks*
leader plugin
008 plugin
^^ Testiranje
* signature ZS
* selfcheck - cirkulacja + rezervacije
* ฤipiranje (ลกto se upisuje u title nakon upisivanja podataka na ฤip?)
* printanje signatura
* cirkulacija
^^ Prijevodi
* osim hrvatskog, dodati njemaฤki, francuski, ...
# download
# ./translate update hr-HR
# popraviti:
** Available for
** No items available...
** Your account will expire on
# ./translate install
^^ Upute za ฤipiranje
^^ Obavijesti
* obavijest za web
* obavijest za knjiลพniฤare
.pre
insert into biblio (select * from deletedbiblio where biblionumber=100);
delete from deletedbiblio where biblionumber=100;
insert in to items (select * from deleteditems where biblionumber=100);
delete from deleteditems where biblionumber=100;
insert in to biblioitems (select * from deletedbiblioitems where biblionumber=100);
delete from deletedbiblioitems where biblionumber=100;
.pre
How to make new batch using mysql?
.pre
mysql> select '232' as batch_id, itemnumber as item_number, 'SRE', 'Labels'
into outfile '/tmp/zpm-label-batch.txt' from items where homebranch = 'ZPM'
and enumchron is null order by copynumber + 0;
mysql> load data local infile '/tmp/zpm-label-batch.txt' into table
creator_batches (batch_id, item_number, branch_code, creator);
.pre
Dokumentacija SIP2 protokola: {file: SIP2_3M_Standard_Interchange_Protocol_2.10.pdf}
{toc: }
^ Koha SIP2 server
Koha koristi SIPServer implementaciju sa https://github.com/atz/SIPServer
^^ SIPconfig.xml
Dodati korisniฤke raฤune *za svaki selfcheck jedan*
.pre
<accounts>
<login id="sc1kat" password="**password**" delimiter="|" error-detect="enabled" institution="FFZG" />
...
.pre
I instituciju
.pre
<institutions>
<institution id="FFZG" implementation="ILS" parms="">
<policy checkin="true" renewal="true" checkout="true"
status_update="false" offline="false"
timeout="100"
retries="5" />
</institution>
.pre
^^ start server
run from lib directory with
.pre
perl -IC4/SIP -MILS C4/SIP/SIPServer.pm /etc/koha/SIPconfig.xml
.pre
http://bugs.koha.org/cgi-bin/bugzilla/show_bug.cgi?id=2362
^^ Skripta za pokretanje
.pre
dpavlin@koha:/srv$ sudo ./sip2-server.sh start
.pre
^^ syslog
SIP server zapisuje transakcije u syslog sa `local6` facility:
.pre
dpavlin@koha:/var/log$ grep LOG_SIP /usr/share/koha/lib/C4/SIP/SIPServer.pm
use constant LOG_SIP => "local6"; # Local alias for the logging facility
.pre
Da bi preusmjerili logiranje u poseban file treba dodati slijedeฤe u `/etc/syslog.conf`:
.pre
local6.* -/var/log/sip2.log
.pre
^^ Analiza logova
Broj razliฤitih SIP2 poruka u naลกoj implementaciji
.pre
dpavlin@klin:/srv/ps-trend$ grep MSG sip.*/* | cut -d: -f6 | cut -d\' -f2 | cut -c-2 | sort | uniq -c
6614 09
3234 10
7526 11
3763 12
4778 35
2389 36
4784 63
2392 64
828 93
414 94
2875 98
5750 99
.pre
* 09 Checkin
* 10 Checkin Response
* 11 Checkout
* 12 Checkout Response
* 35 End Patron Session
* 36 End Session Response
* 63 Patron Information
* 64 Patron Information Response
* 93 Login
* 94 Login Response
* 98 ACS Status
* 99 SC Status
^ 3M SIP emulator
3M self check emulator kako iskonfigurirati
0d 00 ne radi
0d 0A radi
Popravak za taj problem sa "SIP2 server"<http://koha-dev.rot13.org:8081/cgi-bin/gitweb.cgi?p=koha-ffzg.git;a=commitdiff;h=6c6f530bc73826c2e8445f4febd6e888cd1acfc9> strane
^^ Putty tunnel
{image: putty-sip2-config.png}
^^ Konfiguracija
`C:\Program Files\3M Library Systems\3M SIP2 Development Kit\SC_Emulator`
{file: Settings.sc}
Jedina stvarno bitna promjena je:
.pre
[COM]
com_type = sockets
[TCP/IP]
ip_address = 127.0.0.1
host_name =
tcp_port = 6001
.pre
^^ Pokretanje pod wine-om
.pre
dpavlin@klin:/virtual/win$ sudo mount kvm-winxp.img /mnt/usb/ -o loop,offset=`expr 63 \* 512`,uid=dpavlin -t ntfs
dpavlin@klin:/virtual/win$ wine /mnt/usb/Program\ Files/3M\ Library\ Systems/3M\ SIP2\ Development\ Kit/Program/SCEmul.exe
.pre
Skripta za pokretanje: {file: SC_Emulator.sh} - provjerava da li je SIP server startan i povezuje se na njega
^ KOHA lokalne promjene
"u naลกem git-u"<http://koha-dev.rot13.org:8081/cgi-bin/gitweb.cgi?p=koha-ffzg.git&a=search&h=ffzg2&st=commit&s=dpavlin>
^ BUGS
* "#250: SIP2 output encoding"<http://bugs.rot13.org/rt/Ticket/Display.html?id=250>
** "01-PatInfo.scs"<http://bugs.rot13.org/rt//Ticket/Attachment/1826/792/01-PatInfo.scs>
* "#400: Selfcheck konfiguracija"<http://bugs.rot13.org/rt/Ticket/Display.html?id=400>
* "#408: sip2: issuingrules.finedays nedostaje"<http://bugs.rot13.org/rt/Ticket/Display.html?id=408>
^ Nova implementacija
https://github.com/dpavlin/Biblio-SIP2
Primjer koriลกtenja:
.pre
dpavlin@klin:~/klin/Net-SIP2-Simple$ ACS=10.60.0.252:6001 ./sc-emulator.pl
.pre
.pre
LOAD DATA LOCAL INFILE 'importfile.csv'
INTO TABLE _test_table_
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(field1, filed2, field3);
.pre
{toc: }
^ Resursi Koha zajednice
http://bugs.koha-community.org/
* Bugzilla
* Koha Gitweb
* Koha Wiki
* Koha YouTube Channel
* Vimeo Channel
^ Hrvatska udruga Koha korisnika
* "KohaCUG"<http://saturn.ffzg.hr/koha-cug> - Koha Croatian User Group
^ Koha dokumentacija i upute
* http://koha-community.org/documentation/
* http://lisolutions.org/content/learning-and-enhancing-koha
* http://wiki.koha-community.org/wiki/Category:Documentation
* http://www.pakban.net/brooke/ - ovdje vrijedi zaviriti u Newbie Guide
^ Mailing liste
* http://koha-community.org/support/koha-mailing-lists/
^ Prijevodi
* http://translate.koha-community.org/
^ Upute razne
*How To Install MarcEdit On Linux Under Wine*
http://wiki.koha.org/doku.php?id=en:record_manipulation:software:how_to:marcedit
^ Upute
* "UPUTE ZA KATALOGIZACIJU"{link: knjiznica[Katalogizacija]} na Wiki Knjiลพnice Filozofskog fakulteta
^ Frameworks & plugins
* [FFZG MARC frameworks]
* [Izrada predloลพaka]
* [FFZG MARC frameworks plugins]
* {link: koha-cug [Pisanje Koha plugina] }
* [Signature za zatvoreno spremiลกte]
^ Koha i RDA
* http://wiki.koha-community.org/wiki/RDA
* http://lists.koha-community.org/pipermail/koha-devel/2010-November/034590.html
^ Katalogizacija elektroniฤkih izvora
* http://lists.katipo.co.nz/pipermail/koha/2011-September/030419.html
* http://lists.katipo.co.nz/pipermail/koha/2011-September/030423.html
* http://lists.katipo.co.nz/pipermail/koha/2011-September/030511.html
Pojavio se problem kod brisanja zapisa. Kada je zapis brisan i dalje se pokazuje u rezultatima i dalje ga se moze pretraลพiti preko search plugin-a
(primjer inv.broj rom30517 drugi naslov -language and social context: selected readings). kada kliknes na njega pojavljuje se error 404!
^^^^ KATALOGIZACIJA ฤASOPISA:
* postaviti *LEADER*
* postaviti *008*
* srediti *item zapis* za ฤasopise (dogovoriti s mihelom, dubravkom ลกto im sve treba)
** signatura
** lokacija
** status za posuฤivanje
* *broj signature*: upisivao bi se s razmakom ispred zadnja tri broja (npr: 52 638) - moลพe li se postaviti da se pretraลพi i kao: 50 000 i kao 50.000 i kao 50000?
* postaviti da je *856 * u opacu vidljiv, kao i *URI * u zapisu o primjerku
* postaviti da *760 * ima vezu na drugi zapis (preko $w) - i da se vidi: nastavlja se... - tj. preko indikatora
* pitanje *posuฤivanja * dubleta ฤasopisa!
* postaviti vidljivim u OPAC-u fond ฤasopisa iz bib zapisa
Import korisnika iz ISVU sustava u Kohu
^ backup
.pre
dpavlin@koha:/srv/koha-upisi-2011$ mysqldump koha borrowers > borrowers-2011-08-23.sql
.pre
^ import users
.pre
dpavlin@koha:/srv/koha-upisi-2011$ ./koha-new-borrowers.pl
+++++~+++++++_+++++~+++++++++~+++++_~++++++++++++++++++++++++++++++++++++~+++++++++++++++++ 100
+~++++++++++++++++++++++++++~++++++++++++++++++++++++++++++++++++++++++++~+++++++++++++++~+ 200
+++~++~+++++++++~+++++++++++++++++++++++++++++++++++++++~+~++++++++++++++++++++++++++++++++ 300
++++++++++++++++~++++++++++++~+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 400
+++++~++++++++++++++++++++++++++++_+++++++++++++++!+++++++_++++++++++++~++++++++++++++++++~ 500
+++++++++++++++++++++++++++++++++++++++++~~+++++++~++++++++++++++++++++++++++~+++++++++++++ 600
+~++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++~+++++++++++++_+++++++++++++ 700
+++++++++++++++++++++++++++++++++~++++++++~+++++++++++++++~+++++++++++++++++++~++++++++++~+++~+~++++ 800
+++++~++++++++++++++++++++++++++++ 834 { add => 794, err => 1, mod => 34, nop => 5 }
.pre
^ cardnumbers
.pre
dpavlin@koha:/srv/koha-rfid$ ./generate-cardnumber.pl --commit
# ...
# opened cardnumbers in this run: { 20101126 => 1, 20110721 => 1, 20110822 => 1, 20110823 => 2, 20110901 => 828 } at ./generate-cardnumber.pl line 128.
backup for borrowers table: backup/borrowers.2011-08-23T16:36:18.sql 4558012 bytes
generated print.2011-08-23T16:36:18.txt 37180 bytes
.pre
* [Nabava - radni procesi]
{toc: }
^ Funds i budget
* sredstva iz kojih se knjiga plaฤa i koliko novaca je predviฤeno
* odrediti kratice za funds - uskladiti s raฤunovodstvom
* ล to kad ne znamo unaprijed koliko novca je predviฤeno? upisati 0 ili neki velili iznos?
^ Tablice u bazi
verzija: 3.01.00.100
aqbasket
aqbasketgroups
-aqbookfund-
aqbooksellers
aqbudgetperiods
aqbudgets
aqbudgets_planning
aqcontract
aqorderdelivery
aqorders
aqorders_items
^ Inventarni broj
Cilj: jedna inventarna knjiga
*Trenutno stanje:*
* svaka zbirka ima inventarnu knjigu iz stare knjiลพnice
* na primjerak se upisuje (polje 952i) stari invenrarni broj s prefiksom
* Primjerci bez inventarnog broja imaju samo prefiks.
^^ Novi inventarni broj
* od 1. sijeฤnja 2010
* broj odraลพava redoslijed unosa u bazu
* mora li inventarni broj biti redni broj? (slijed unosa u pri tom se zadrลพava, ali niz brojeva "ima rupe")
^^ Podaci za inventarnu knjigu
* datum
* naslov
* dobavljaฤ
* cijena
* raฤun
----
----
Stare biljeลกke:
Zadaci:
* opisati radni proces nabave knjiga
* opisati radni proces kontinuacije ฤasopisa
----
*Purchase suggestion*
* nesto ne valja s javljanjem korisniku u kojem je statusu njegov prijedlog (provjeriti joลก jednom)
* u trenutku kada knjiลพnica odluฤi ลกto ฤe s knjigom (acceptat ili rejectat) korisniku se briลกe njegov zahtjev sa suฤelja. Ako promijeni opciju *suggested by* sa *anyone* na *me* i klikne *set filter*, tada mu se pojavljuju rezultati njegovih zahtjeva. Trebalo bi napraviti da je *me default*, jer preko *anyone* se ne dobiva zadovoljavajuฤi rezultat.
* na korisniฤkom suฤelju trebalo bi dodati joลก i prozor za *naslov* i *ISBN* jer takav prozor ne postoji (postoje: summary, author, copyright date, publisher i note)
* treba vidjeti ลกto toฤno znaฤi *authorized values* u *reason* prozoru (iskreno, dorja bas i nije shvatila)
* moลพe li se ograniฤiti *purchase suggestion* opcija na neke *korisniฤke grupe* (tipa profesori, a ne i studenti) - ลกto znaฤi: hoฤe li ta opcija biti legitimna komunikacija za profesorske deziderate?
* kad knjiลพniฤar vidi suggestion vidi samo ime "naruฤioca" ali ne i njegov status (prof, stud...) - moลพe li se poลกtimati?
* koliko je meni jasno, ta opcija je pod nabavom - treba vidjeti kako ฤemo nabavu raditi i treba li nam uopฤe ta opcija - hoฤe li nabava biti centralizirana...
* moลพda bi bilo super (ako ฤe *nabava* biti *centralizirana*) da je to naฤin komunikacije izmeฤu voditelja zbirke i osobe zaduลพene za nabavu (naravno ako je moguฤe na neki naฤin ograniฤiti ili pobliลพe objasniti "naruฤioca")
* Dobricin suggestion je nestao :) - smjestio se pod prihvaฤene
*Pretraลพivanje po naslovu*
Default je na pretraลพivenje po dobavljaฤu.
U formi za pretraลพivanje na vrhu stranice su dvije opcije - Supplier Search i Orders Search. Treba odabrati Orders Search. Nakon ลกto upiลกemo upuit i kliknemo na Submit (ili enter) moramo odabrati raspon datuma unutar kojih ลพelimo pretraลพivati narudลพbe. Onda kliknemo na Search i dobijemo narudลพbe.
*Printanje iz nabave*
* dodati funkciju printanja narudลพbi
^ Primjerci
* MAG, DIS, DIP pretvoriti u
* statusi stara posudba: oลกteฤeno -> lost
* pomaknuti inventarni broj na poฤetak, u intranetu u editoru za iteme
^ Donacije
1.korak: izrada popisa pristiglih naslova
* odreฤivanje vrijednosti
* dogovorit se oko kriterije za odreฤivanje vrijednosti, prema godinama? prema izdavaฤu? prmjer: koliko vrijedi knjiga izdana sredstvima projekta neke nevladine organizacije?
* podaci o donatoru
ovaj korak mogli bi raditi praktikanti, demosi i ostali pomagaฤi
Postupak:
1. odabrati vendora Donacije
2. pod Basket name upisati ime donatora i datum, u ovakvom obliku: D.Masliฤ - 2011-03-30;
Internal note i vendor note nisu obavezni.
Pod internal note moลพe se upisati se napomena knjiลพniฤara. Pod Vendor note moลพe se upisati napomena i komentari donatora..
3. odabrati from existing record ili...
2. korak: zaprimanje i inventarizacija pristiglih primjeraka
Koraci:
* odabrati vendora
*
* zahvale za donacije?
^ Nabava stranih knjiga karticom
^ Nabava knjiga od domaฤih dobavljaฤa
* narudลพbenica
^ Nabava knjiga iz projekata
Raditi paralelno s {link: knjiznica [Knjiลพniฤne web stranice]}
Treba izdraditi normativne baze za:
* signature
* autore
*Biljeลกke:*
Provjeriti kako radi.
Postoji skripta za bulk import.
Postoje opcije u global system preferences.
http://koha.1045719.n5.nabble.com/bulk-BiblioAddsAuthorities-td3378000.html
Page renamed to [FFZG MARC frameworks (verzija 3.1)]
*[SafeQ integration]*
Integracija podataka o korisnicima iz sustava za kopiranje, Koha knjiลพniฤnog sustava i AAI sustava uz pomoฤ LDAP protokola
*[Podaci na korisniฤkim karticama]*
Opis procesa pripreme podataka na karticama za koriลกtenje u 3M RFID sustavu i u sustavu za fotokopiranje
*[Printanje i programiranje kartica]*
Opis trenutne procedure printanja i programiranja kartica. Biljeลกke o razvoju nove procedure.
*[Iskaznice za kopiranje za grupu korisnika]*
^ Upute za otklanjanje problema
^^ RFID ฤitaฤi na kopirkama javljaju "Zabranjen pristup", i stroj nije pripremljen (tako neลกto...)
Pobrisati jobove na kopirci
^^ Ne radi printanje
Da bi radilo printanje sa studentskih raฤunala, korisnik *mora* imati AAIedu korisniฤki raฤun (za logiranje u raฤunala, oblika `login@ffzg.hr`) i mora imati isti login u Kohi pod OPAC login.
AAIedu login i zaporka se mogu provjeriti logiranjem na https://ldap.ffzg.hr/
{toc: }
^ Printanje u Beฤu
> Beฤ = batch (eng.) - u jednom cugu, za razliku od po potrebi
Napisati postojeฤu proceduru printanja kartica (pokretanje skripte)
^ Naruฤivanje praznih kartica
Paziti da zadnja strana bude bijela, jer i tako moramo printati dvostrano, pa nam to daje veฤu fleksibilnost.
^ Plan
* ฤitaฤ postaviti ispod printer-a tako da programirana kartica padne na ฤitaฤ i isprogramira se (moลพda malo alu-folije ako ฤitaฤ bude hvatao kartice iz spremnika)
* Linux stroj sa podrลกkom za pritanje kartica i barkoda na njima koji podatke sprema nazad direktno u Kohu
^ Workflow
* link sa intranet-a na lokalnu maลกinu (linux stroj) gdje se pokreฤe pitanje na printer (moลพda lokalno spojen, moลพda mreลพom)
* kartica pada na ฤitaฤ koji je programira i ลกalje podatak u kohu sa postom na neki ssl cgi (moลพda sa svojim certifikatima?)
^ CUPS driver
{include: rot13 [Evolis Dualys 3 Smart]}
^^ Kronologija dogaฤanja relevantnih za implementaciju softvera u Knjiลพnici Filozofskog fakulteta
^^^ kraj 2005.
U NSK osnovan Centralni tim za provoฤenje projekta implementacije programskog paketa Voyager u knjiลพnice u sustavu znanosti i visokog obrazovanja.
Knjiลพnice FF-a odgovaraju na Upinik o implementaciji, potreban NSK u svrhu planiranja ฤitavog sustava.
24. studenoga 2005. godine potpisan je Stalni ugovor o raฤunalnom programu izmeฤu Endeavor Information Systems Inc. i Nacionalne i sveuฤiliลกne knjiลพnice u Zagrebu koji predsttavlja glavni ugovor u odnosu na sve ostale akademske i istraลพivaฤke institucije u Republici Hrvatskoj.
^^^ 2006.
Zapoฤinje implementaicija Voyager-a u NSK. Otvorene su demo baze za sva ostala sveuฤiliลกta i odrลพani orijentacioni treninzi.
Krajem 2006. dovrลกeni graฤevinski radovi nove Knjiลพnice Filozofskog fakulteta. ฤeka se II. faza kredita kako bi se moglo zapoฤeti s unuranjim ureฤenjem i opremanjem.
Viลกe od 20. dislociranih knjiลพnica FF-a nema softver zadovoljavajuฤih karakteristika. Postoji samo primitivna softverska podrลกka pri obradi graฤe i samostalno razvijen online katalog za pretraลพivanje fonda zadovoljavajuฤih osobina.
Filozofski fakultet imenuje koordinatora za implemeteciju Voyager-a u svojoj ustanovi.
^^^ poฤetak 2007.
NSK poฤinje s produkcijskim radom u Voyager softveru.
Filozofski fakultet aktivno se ukljuฤije u projekt implementacije Voyager-a.
Bez softverskog rjeลกenja koje ฤe podrลพati sve najfrekventnije poslovne procese u novoj Knjiลพnici nije moguฤe pustiti u pogon novu Knjiลพnicu. Trebalo je automatizirati minimalno obradu u posudbu (ลพalosna je ฤinjenica da su u tom trenutku Knjiลพnice FF-a biljeลพile podatke o posudbi ruฤno!)
Trebalo je pripremiti graฤu za smjeลกtaj na police u novim ฤitaonicama, osmisliti novi sustav za smjeลกtaj graฤe, svakom primjerku knjge pridijeliti odgovarajuฤu oznaku i zapisati to u raฤunalnu bazu.
^^^ sredina 2007.
Zapoฤinje se sa samostalnim razvojem softvera (WebPAC2) za ureฤivanje i konverziju podataka kako bi se proces implementacije novoga softvera maksimalno ubrzao.
Knjiลพnice FF-a imale su u tome trenutku viลกe od 300.000 zapisa o knjigama i drugoj graฤi, razlomljenih u viลกe od 20 odvojenih baza u softveru CDS/ISIS. Koristile su softver razliฤit od softvera kojeg je koristila NSK i zato je konverzija tih podataka ukljuฤivala drugaฤiju, prilagoฤenu proceduru. Velik broj knjiลพnica unutar Sveuฤiliลกta u Zagrebu koristi takoฤer CDS/ISIS. Softver za konverziju je objavljen pod slobodnom licencom i postojala je nada da ฤe se iskoristiti i za druge knjiลพnice.
^^^ poฤetak 2008.
Nastavljaju se radovi na unutrarnjem ureฤenju i opremanju zgrade nove Knjiลพnice. Raspisuje se natjeฤaj za RFID opremu i u dokumentaciji toga natjeฤaja treba navesti koji softver se koristi za knjiลพniฤno posovanje (sustavi moraju znati komunicirati).
U uลพoj i ลกiroj okolini nacionalnoga projekta za nabavu knjiลพniฤnoga softvera desile su se promjene zbog kojih su se aktivnosti usporile (<http://www.nsk.hr/Info.aspx?id=642>).
Knjiลพnice FF-a morale su krenuti u potragu za alternativnim rjeลกenjem, a potraga je bila voฤena s dva cilja na umu: rjeลกenje mora biti cjelovito i softver mora omoguฤiti razmjenu podatake s drugim knjiลพnicama. Takoฤer, rjeลกenje nije smjelo biti skupo jer se samostalna nabava softvera nije planirala.
^^^ oลพujak 2008.
Odabrana je Koha, slobodno dostupan softver. Zapoฤela je intenzivna edukacija o administraciji sustava i pripremanje sustava za prihvat konvertiranih podataka (migracija) i ostala potrebna podeลกavanja.
^^^ srpanj 2008.
Odabran dobavljaฤ RFID opreme. Zapoฤinje rad na implementaciji RFID sustava i integraciji s knjiลพniฤnim sustavom.
^^^ lipanj 2008.
Dovrลกena migracija podataka u Kohu. Zapoฤela obrada graฤe za ฤitaonice u otvorenom prisutpu - pridjeljivanje novih oznaka za smjeลกtaj graฤe i fiziฤka obrada primjeraka.
^^^ oลพujak 2009.
Knjiลพnica je sveฤano otvorena 11. oลพujka 2009., a 16. oลพujka krenuo je automatizirani upis korisnika i posudba. Podaci o korisnicima preuzimaju se iz fakultetskih sustava.
Na policama je ฤekalo preko 110.000 primjeraka knjiga opremljenih RFID oznakama i novim naljepnicama s oznakom smjeลกtaja, spremnih za koriลกtenje i posudbu. Uskoro su stavljeni u pogon i ureฤaji za samoposudbu knjiga integrirani s Kohom.
^^^ lipanj 2009.
U tri mjeseca obraฤeno je dodatnih oko 16.000 knjiga za ฤitaonice u otvorenom pristupu (oko 250 jedinica dnevno). U posudbi je uฤinjeno oko 30.000 transakcija (oko 500 jedinica dnevno). Nastavlja se s implementacijom ostatka knjiลพniฤnog poslovanja (nabava, obrada periodike, meฤuknjiลพniฤna posudba).
Bilo kakva brzopleta zamjena softvera nekim drugim u ovome trenutku ozbiljno bi naruลกila funkcioniranje informacijskog sustava u Knjiลพnici FF-a. Zbog kompleksnosti cijeloga postupka knjiลพnice opฤenito nemaju tendenciju migirati na drugi softver u ciklusima manjim od 5 godina.
stranica je preseljena na "drugi wiki"{link: knjiznica[Redizajn web stranica]}
*{link: knjiznica[UPUTE ZA ฤIPIRANJE]}*
{toc: }
^ Aplikacije
(dogovoriti s dobavljaฤem)
^^ oznaฤavanje graฤe RFID oznakama
radni proces:
* pronaฤi primjerak u bazi, postaviti se na suฤelje za editiranje primjerka
* nalijepiti naljepnicu na odgovarajuฤe mjesto na knjizi
* poloลพiti knjigu na "ploฤu"
* provjeriti podatak o novoj signaturi
* kliknuti na polje barkod i izgenerirati barkod (alternativa: barkodi su unaprijed generirani)
* pritiskom na tipku (koju?) podatak iz polja barkod upisuje se na ฤip
* sustav mora signalizirati da je proces pisanja po ฤipu uspjeลกno zavrลกen
Unos podataka odvija se preko Koha suฤelja za unos podataka.
Moลพe li i treba li zaลกtiti pisanje/ฤitanje ฤipa lozinkom?
Potrebno je nekako evidentirati da je knjiga proลกla obradu.
Na suฤelje za unos podataka treba dodati indikator o poziciji naljepnice.
(ovdje treba opisati ลกta brojaฤ toฤno radi)
^^^ podaci na RFID oznaci
Konaฤni dogovor je da se naljepnice isporuฤuju prazne (bez podataka u ฤipu i bez isprinta na naljepnici).
Na RFID oznaku zapisuje se barkod. Barkod je serijski broj koji se sastoji od prefixa 130 i 7 znamenaka (ukupno 10 znamenaka). Brojevi se generiraju unutar knjiลพniฤnog softvera.
*raspraviti:*
ฤip se "zakljuฤava" nakon ลกto se podaci zakodiraju na njega - nemoguฤe ga je preprogramirati
prednost: iskljuฤuje se rizik da netko izvana izbriลกe, zamijeni podatak u ฤipu i time uฤini zbrku meฤu inventarom ili ukrade knjige
nedostatak: iskljuฤuje moguฤnost bilo kakvog pokuลกaja da se smanji rizik od povrede privatnosti
naฤin na koji se moลพe smanjiti rizik od povrede privatnih podataka:
svaki put kad se knjiga zaduzi, na nju se upisuje upravo izgenerirani sluฤajni broj. veza izmeฤu tog broja i identifikatora primjerka ฤuva se u posebnoj tablici, dostupnoj samo knjiลพniฤnom sustavu. u trenutku povratka knjige, broj se briลกe i na ฤip se kodira stara oznaka.
^^ printanje signatura
radni proces:
* knjiga se postavi na ploฤu
** pritisne se programska tipka (mora li to)?-
* naljepnica izaฤe na printer
Na naljepnice treba isprintati:
* signaturu
* barkod
* naziv ustanove
format naljepnica: 105x40
preko naljepnice ide zaลกtitna folija
^^ inventura
* snimanje stanja na policama uz pomoฤ ruฤnog ฤitaฤa i dobivanje ลพeljenih izvjeลกtaja
** koji izvjeลกtaji nam trebaju?
* oฤitavanje podataka o ฤipovima i promjene u bazi
** proฤitati podatke s ฤipa za neki set knjiga
** prekontrolirati i urediti te podatke prije daljneg procesiranja
** uฤiniti promjene u bazi na tom setu podataka (pr. proฤitati podatke na knjigama s police na 1. katu i u bazi oznaฤiti da su knjige na 1. katu)
* u kom formatu su podaci koje proฤita ฤitaฤ? u kom obliku se mogu exportati?
^^ evidencija prolazaka kroz vrata
zapisati statistiku prolazaka kroz vrata (u posebnu tablicu)
u tablicu treba zapisati:
datum i vrijeme
oznaku vrata
oznaku knjige
Ovo nije implementirano jer isporuฤena vrata ne znaju ฤitati identifikacijske podatke s ฤipa, samo binarni podatk o sigurnosti (otkljuฤano, zakljuฤano). To je puno bolje s aspekta ฤuvanja privatnosti.
^^ iskaznice
* isporuฤiti bazu
* nakon ลกto stigne roba, istestirati iskaznice
* probne imamo samo prazne
^^ ostalo
* traลพiti _protocol specification_ za komunikaciju s readerom (moded 810)
^ Biljeลกke
*Za proฤitati*
Use of RFID Technology in Libraries: a New Approach to Circulation, Tracking, Inventorying, and Security of Library Materials
http://www.webpages.uidaho.edu/~mbolin/shahid.htm
*Integracija ILS i RFID sustava*
* vrsta i format podataka koji ฤe biti zapisani na ฤipove i kartice, imajuฤi na umu cilj objedinjenoga sustava za knjiลพniฤno poslovanje na razini Sveuฤiliลกta
* integracija na radnom mjestu
*Sigurnost*
* opseg evidencije knjiga i korisnika na izlazu iz knjiลพnice
* opseg evidencije o posudbi knjiga
* pravila za sigurnost podataka u radu RFID i ILS sustava, popis 'uloga' u radu knjiลพniฤnoga sustava, pripadnost knjiลพniฤara i pomoฤnoga osoblja pojedinim ulogama, ovlaลกtenja uloga za pojedine operacije u sustavu za knjiลพniฤno poslovanje, ovlaลกtenja uloga za uvid u podatke i izmjene podataka, rokova u kojima se zapisi mogu vidjeti odnosno nakon kojih se moraju brisati i sl.
Sigurnost podataka u sustavu knjiลพniฤnog poslovanja i RFID sustavu snaลพno ovisi o moguฤnosti nadzora dohvata i upotrebe tih podataka. Prvi uvjet za to je moguฤnost pristupa podacima samo autenticiranih korisnika, a drugi da autenticirani korisnici mogu doฤi do podataka u odreฤenim operacijama samo ako su autorizirani za izvoฤenje tih operacija.
*Podaci*
U svakom ฤipu ฤe biti trajno zapisan niz znamenki koji predstavlja jedinstveni identifikator svakog sveska koji je raspoloลพiv za posudbu.
U procesu posudbe na ฤip se zapisuje status โzaduลพenoโ a kod razduลพivanja status โnije zaduลพenoโ. Izlazna vrata oฤitavaju ovaj podatak s ฤipa knjige koju korisnik iznosi kroz vrata i aktivira alarm ako knjiga ima u ฤipu zapisan status โnije zaduลพenoโ.
Ako je uspostavljena veza sa sustavom za knjiลพniฤno poslovanje, izlazna vrata doznaju naslov knjige koja nije zaduลพena kako bi se lakลกe moglo pronaฤi problematiฤnu knjigu kad se na izlazu naฤe nekoliko korisnika, svaki s po nekoliko knjiga. Alternativno, izlazna vrata drลพe popis svih naslova u knjiลพnici (i periodiฤki ga osvjeลพavaju) pa mogu znati naslov knjige i kad ne radi veza sa sustavom za knjiลพniฤno poslovanje.
(Ovo nije implementirano - to je argumentacija zaลกto ta moguฤnost moลพe biti korisna, ali pitanje je koliko je to zapravo korisno. Isporuฤena vrata, na sreฤu, mogu znati samo da li je knjiga uredno zaduลพena ili nije.)
*workflow*
* naljepi naljepnicu s identifikacijskom oznakom na knjigu
* upiลกi neki podatak o knjizi (nor. inventarni broj) u polje za pretraลพivanje
* ako je rezultat samo jedan, otvara se editor s ovim poljima: * polje za unos identifikacijske oznake (preko barkod ili RFID ฤitaฤa) * prikaz podataka koji omoguฤuju i olakลกavaju identifikaciju graฤe: * identifikacijski brojevi iz koha.items (biblionumber, itemnumber, biblioitemnumber - odrediti koji su potrebni?) * inventarni broj * naslov
* ako je rezultata viลกe, ispisuje se lista s koje treba odabrati odgovarajuฤi primjerak, odabire se odgovarajuฤi, pa se onda otvara editor
* da li se podaci upisuju direktno u bazu ili u posebnu? ako se piลกu u posebnu imamo problem sinkronizacije.
* da li moลพda dozvoliti moguฤnost editiranja joลก nekih polja. zaลกto? ako da, kojih polja?
*Protokoli za komunikaciju*
NCIP, SIP2. SLNP, Z39.50
Koha razvija podrลกku za NCIP.
* http://openncip.org/
* http://wiki.koha.org/doku.php?id=en:development:roadmap3.0&s=ncip
*Samoposudba*
* u projektu nisu predviฤene stanice za vraฤanje knjiga u preriodu kad je knjiลพnica zatvorena. ta usluga je poลพeljna
* stanice za self-check out moguฤe je napraviti preko podrลกke za self-checkout u ILS-u
*Pitanja*
* koje podatke sadrลพi identifikacijska oznaka?
* da li se RFID moลพe ponovo kodirati - pr. sad upiลกemo samo neki automatski generirani redni broj, a kasnije se predomislimo i hoฤemo joลก neke druge podatke?
* izaลกla vijest u novinama/netu: mozda se tiฤe jedinstvenog broja korisnika: http://www.net.hr/vijesti/hrvatska/page/2008/03/14/0852006.html - pogotovo za sustav (voyager...)
* Iva: ลกto je s iskaznicama korisnika? hoฤe li one imati isti sustav identifikacije - barkode/rfid i kako/kad/tko ฤe ih izraฤivati?
* preporuka za problem privatnosti
* pojaลกnjenje "security" opcije u 3M softveru
* da li tvorniฤki broj na ฤipu ostaje zauvijek zapisan
* ลกto ฤe osigurati da se naลก ฤip zvoni na
* na koji naฤin zapisati
*24.10.2010.*
corrupted:
248612
249478
250682
251126
251127
251128
253059
253170
253916
*22.09.2010*.
corrupted:
253170
253059
251128
251127
251126
250682
(i joลก 2)
^ Itemlost status
*2010-10-24*
.pre
mysql> update items set itemlost = 2 where ccode='KOM' and location <> 'IZC' and itype <> 'PER' and itemlost = 1 ;
Query OK, 859 rows affected (1.88 sec)
Rows matched: 859 Changed: 859 Warnings: 0
mysql> update items set itemlost = 1 where ccode='KOM' and location = 'ZSPO' and itype <> 'PER' and itemcallnumber is null and itemlost = 0 ;
Query OK, 677 rows affected (1.92 sec)
Rows matched: 677 Changed: 677 Warnings: 0
.pre
^ Inventarni broj - public note (items.itemnotes)
Koha dolazi s poljem 952z mapiranim u items.itemnotes. Sadrลพaj tog polja pokazuje se u tablici s primjercima u koloni "Notes".
U FFZG se pod "Notes" u OPAC-u prikazuje stari inventarni broj koji je zapisan u polje 952i koje je mapirano u items.itemnotes.
Polje 952i ne postoji u default Koha MARC frameworku.
Public note je tako potroลกen za inventarni broj i nema moguฤnosti unoลกenja stvarne javne napomene za primjerak.
Inicijalna implementacija uฤinjena je na ovaj naฤin, ลกto je kasnije promijenjeno.
^ Inventarni broj - copynumber
U veljaฤi 2010. (?) inventarni broj je preseljen u copynumber
Javna napomena (items.itemnotes) moลพe se sada upotrebljavati u svojem originalnom znaฤenju.
Postoji sada novo polje u Koha items tablici (dodali BibLibre) - stocknumber. To polje bi se zapravo trebalo koristiti za inventarni broj - nije mapirano u MARC21 polje, a trebalo bi biti.
^ Konverzija i migracija podataka iz CDS/ISIS-a
^^ Konvertirana polja
| *MARC* | *naziv polja* | *autorizirana vrijednost* | *Koha baza* | *znaฤenje* |
| 952$8 | Zbirka | CCODE | items.ccode | oznaka zbirke |
| 952$a | _home branch_ | branches | items.homebranch | FFZG |
| 952$b | _holding branch_ | branches | items.holdingbranch | FFZG |
| 952$c | Lokacija | LOC | items.location | kat i struฤna skupina (taj podatak je kodiran u signaturi) |
| 952$o | Signatura | | items.itemcallnumber | signatura na primjerku |
| 952$p | barcode | | items.barcode | barkod, tj. broj u ฤipu |
| 952$i | Inventarni broj | | items.itemnotes | stari inventarni broj s prefiksom zbirke - kasnije preseljeno u copynumber = 952$t |
^^ Migracija
U migraciji Koha ฤita podatke o primjercima iz polja 952. Moguฤe je te podatke staviti i u neko drugo polje, no u tom sluฤaju treba napraviti odgovarajuฤe linkove u MARC framework.
*Samo 1 MARC tag* moลพe biti mapiran u iteme (postoji framefork test).
* <https://koha-dev.rot13.org:8443/cgi-bin/koha/admin/marc_subfields_structure.pl?tagfield=952&frameworkcode>=
* <https://koha-dev.rot13.org:8443/cgi-bin/koha/admin/marc_subfields_structure.pl?op=add_form&tagfield=952&frameworkcode>=
Prilikom {link: konverzija [Konverzija podataka] }, podaci o primjercima generirani na temelju inventarnog broja iz ponovljivog polja 991 u CDS/ISIS bazi. Polje 991 je zadrลพano u konvertiranim bibliografskim zapisima, ali se viลกe ne odrลพava (ne briลกu se oni koji su izbrisani u Kohi niti se nadopisuju novi). Inventarnom broju dodan je prefix - kratica sare knjiลพnice (sada zbirke).
Ova stranica dokumentira naลกa podeลกavanja (i pokuลกaje) za ลกto brลพom Koha instalacijom.
{toc: }
^ Apache deflate kompresija
Smanjuje veliฤinu stranice koja se isporuฤije browersu.
{fetchrss: http://sysadmin-cookbook.rot13.org/rss/apache2.xml full}
^ Session
.pre
dpavlin@koha:~$ sudo ./mk-query-digest /var/log/mysql/mysql-slow.log
# Profile
# Rank Query ID Response time Calls R/Call Item
# ==== ================== ================ ===== ======== ================
# 1 0xC7A803CDD4FE9A36 30517.0000 45.5% 349 87.4413 INSERT UPDATE sessions
# 2 0xB4F2B316DFE865C8 8027.0000 12.0% 119 67.4538 SELECT sessions
# 3 0x6019E0D94A244FF5 3952.0000 5.9% 275 14.3709 SELECT opac_news
# 4 0x1F809CA9753CDEE7 2753.0000 4.1% 23 119.6957 SELECT biblio
# 5 0x27CE7D5D2BC5F598 2305.0000 3.4% 206 11.1893 SELECT fieldmapping
# 6 0xB0F504DD073A49CB 2192.0000 3.3% 30 73.0667 SELECT issues items biblio biblioitems
# 7 0x8ED635CB153D27A5 2146.0000 3.2% 19313 0.1111 SELECT reserves reserveconstraints
# 8 0xDB6DC1962741AB10 1978.0000 3.0% 7 282.5714 SELECT biblio biblioitems itemtypes
# 9 0x32783383AEA5AD49 1642.0000 2.4% 10 164.2000 SELECT items
# 10 0x6DD9F09DA2455228 1361.0000 2.0% 8 170.1250 DELETE sessions
.pre
Promjeniti `SessionStorage` u "as temporary files" i opcionalno pomaknuti ih u `/dev/shm` umjesti o u `/tmp/`:
.pre
dpavlin@koha:~$ diff -urw /srv/koha/C4/Auth.pm /usr/share/koha/lib/C4/Auth.pm
--- /srv/koha/C4/Auth.pm 2010-02-20 21:41:34.000000000 +0100
+++ /usr/share/koha/lib/C4/Auth.pm 2010-04-26 16:03:17.671211497 +0200
@@ -1341,7 +1341,7 @@
}
else {
# catch all defaults to tmp should work on all systems
- $session = new CGI::Session("driver:File;serializer:yaml;id:md5", $sessionID, {Directory=>'/tmp'});
+ $session = new CGI::Session("driver:File;serializer:yaml;id:md5", $sessionID, {Directory=>
.pre
^ Profile
^^ Devel::NYTProf
instalacija:
.pre
root@koha-dev-git-reorg:~# cpan Devel::NYTProf
.pre
profile search query:
.pre
root@koha-dev-git-reorg:/usr/share/koha/opac/cgi-bin/opac# time perl -d:NYTProf -I/usr/share/koha/lib/ opac-search.pl q=human | wc
1553 3259 58648
real 0m4.001s
user 0m3.152s
sys 0m0.560s
.pre
generate html report:
.pre
root@koha-dev-git-reorg:/usr/share/koha/opac/cgi-bin/opac# nytprofhtml
Generating report...
Reading nytprof.out
Writing report to nytprof directory
.pre
^^^ koha-240
First run
.pre
dpavlin@koha-240:/tmp$ time perl -d:NYTProf -I/usr/share/koha/lib/ /usr/share/koha/opac/cgi-bin/opac/opac-search.pl q=human | wc
Use of uninitialized value $borrowernumber in string eq at /usr/share/koha/opac/cgi-bin/opac/opac-search.pl line 483.
Use of uninitialized value in string eq at /usr/share/koha/opac/cgi-bin/opac/opac-search.pl line 486.
1962 3177 64512
real 0m8.561s
user 0m5.708s
sys 0m0.724s
.pre
Second run
.pre
dpavlin@koha-240:/tmp$ time perl -d:NYTProf -I/usr/share/koha/lib/ /usr/share/koha/opac/cgi-bin/opac/opac-search.pl q=human | wc
Use of uninitialized value $borrowernumber in string eq at /usr/share/koha/opac/cgi-bin/opac/opac-search.pl line 483.
Use of uninitialized value in string eq at /usr/share/koha/opac/cgi-bin/opac/opac-search.pl line 486.
1962 3177 64512
real 0m6.664s
user 0m5.636s
sys 0m0.816s
.pre
Drop caches and run profile:
.pre
dpavlin@koha-240:/tmp$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
.pre
^^ Zebra reindex
.pre
dpavlin@koha-240:/srv/koha$ sudo -u koha ./misc/migration_tools/rebuild_zebra.pl -b -v -r -d /tmp/indexing -k -x -nosanitize
.pre
Dodati za `952$o` plugin `https://10.60.0.252:8443/cgi-bin/koha/admin/marc_subfields_structure.pl?tagfield=952&frameworkcode=LIB`
https://10.60.0.252:8443/cgi-bin/koha/admin/marc_subfields_structure.pl?op=add_form&tagfield=952&frameworkcode=LIB
Dodatni plugin: http://koha-dev.rot13.org:8081/cgi-bin/gitweb.cgi?p=koha-ffzg.git;a=shortlog;h=refs/heads/rt-390-signatura-zatvorenog-spremista
{link: koha-cug [Pisanje Koha plugina] }
Ova stranica opisuje postupak koji prolaze podaci da bi novootvoreni korisnici preko Koha suฤelja
a) dobili ฤlanski broj (broj kartice)
b) pojavili se u SafeQ sustavu.
SafeQ sustav povlaฤi podatke o korisnicima iz Kohe preko LDAP-a. LDAP je implementiran direktno na podacima u Kohi (vidi [SafeQ integration]), ali SafeQ ne moลพe proฤitati broj korisnika sa kartice, nego samo serijski broj kartice koji koristi RFID protokol (SID).
Taj broj postoji jedino u log datotekama 3M sustava, a kako raฤunalo na kojem se programiraju ฤipovi za sad nije spojeno na mreลพu, cijela procedura ipak ovisi o povremenom presnimavanju podataka na server.
*U razvoju je zamjena za cijelu ovu proceduru koja bi omoguฤila printanje novih isprogramiranih kartica odmah nakon ลกto se korisnik prvi puta ulogira u Kohu* (tj. odmah ฤim aktivira ฤlanstvo u knjiลพnici).
^ trenutno stanje
{fetchrss: http://via.rot13.org/10.60.0.12/SQL2RSS/koha/ full}
{toc: }
^ Generiranje brojeva kartica
Prvi korak je dodjeljivanje brojeva kartica u obliku 200908240042 gdje su prve znamenke datum a zadnje ฤetiri redni broj korisnika u tom danu. To je jedinstveni broj korisnika koji koriste svi ostali servisi (npr. 3M Selfcheck) ali ne i SafeQ-a!
^^ Generiranje brojeva kartica
*ovaj korak radi se na produkcijskoj bazi*
.pre
dpavlin@koha:/srv/koha-rfid$ ./generate-cardnumber.pl --commit
.pre
provjeriti ispis i pokrenuti ponovo sa --commit da bi se promjene zapisale u bazu
generira takoฤer backup borrowers tablice
Ispisuje na kraju generirato ime log datoteke:
.pre
backup for borrowers table: backup/borrowers.2010-09-02T15:05:09.sql 3838484 bytes
generated print.2010-09-02T15:05:09.txt 41879 bytes
.pre
Format loga: cardnumber <tab> login <tab> ime <tab> prezime
.pre
dpavlin@klin:~/klin/Biblio-RFID$ head -1 print.2010-09-02T15\:05\:09.txt
201007140004 kohatest@ffzg.hr Koha Testiฤiฤ Probiลกiฤ ฤลพ
.pre
^ Printanje iskaznica
*ovaj korak se radi na maลกini sa koje se printaju iskaznice*
^^ Podaci za pritanje
.pre
dpavlin@klin:~/klin/Biblio-RFID$ rsync -v koha:/srv/koha-rfid/print*.*.txt .
.pre
^^ Pokretanje printanja
Printanje ฤeka da se kartica makne na RFID ฤitaฤa da bi nastavilo!
.pre
dpavlin@klin:~/klin/Biblio-RFID$ ./scripts/print.pl print.2010-09-02T15\:05\:09.txt
...
QUEUE EMPTY - printing finished
log.print/2010-08-17T16:36:27.txt 100 bytes created
.pre
^^ Kopiranje SID-ova za Kohu
.pre
dpavlin@klin:~/klin/Biblio-RFID$ rsync -rav log.print/ koha.ffzg.hr:/srv/koha-rfid/log.print/
.pre
^ Import SID-ova u Kohu
.pre
dpavlin@koha-dev:/srv/koha-rfid$ ./rfid2koha-borrower-attribute.pl log.print/2010-08-17T16\:36\:27.txt
.pre
----
^ Import 3M log datoteka
*ovaj korak je stara procedura i ne koristi se viลกe*
^^ kopiranje novih logova na koha-dev
`*.LOG` datoteke iz 3M softwarera se kopiraju u `/srv/koha-rfid/log`
.pre
dpavlin@koha:~$ sudo mount /mnt/koncar/
dpavlin@koha:~$ cp -v /mnt/koncar/* /srv/koha-rfid/log/
dpavlin@koha:~$ sudo umount /mnt/koncar/
.pre
^^ preimenovanje u intervale koje pokrivaju
.pre
dpavlin@koha:/srv/koha-rfid$ make rename
find log/ -name "*.LOG" | xargs -i ./rename-log.sh {}
chmod 644 log/*.log
dpavlin@koha:/srv/koha-rfid$ ls -al log | head
total 27860
drwxr-xr-x 4 dpavlin dpavlin 4096 2010-03-01 16:33 .
drwxrwxr-x 6 dpavlin dpavlin 4096 2010-02-25 15:18 ..
-rw-r--r-- 1 dpavlin dpavlin 524488 2010-02-21 02:10 20080922-20081111.log
-rw-r--r-- 1 dpavlin dpavlin 524334 2010-02-21 02:10 20081015-20081024.log
-rw-r--r-- 1 dpavlin dpavlin 524606 2010-02-21 02:10 20081024-20081103.log
-rw-r--r-- 1 dpavlin dpavlin 524322 2010-02-21 02:10 20081027-20081027.log
-rw-r--r-- 1 dpavlin dpavlin 524510 2010-02-21 02:10 20081027-20081029.log
-rw-r--r-- 1 dpavlin dpavlin 524296 2010-02-21 02:10 20081029-20081103.log
-rw-r--r-- 1 dpavlin dpavlin 524366 2010-02-21 02:10 20081103-20081106.log
.pre
^^ provjera novih podataka
.pre
cd log
git status
git add *.log
git commit -m 'new data'
.pre
^^ parse log
.pre
dpavlin@koha-dev:/srv/koha-rfid$ make rfid
...
wc -l rfid.txt
12196 rfid.txt
echo "`cat rfid.txt | cut -d, -f2 | sort -u | wc -l` different tags"
11243 different tags
echo "`cat rfid.txt | cut -d, -f2- | grep ',20' | sort -u | wc -l` card tags"
4151 card tags
.pre
^^ Kopiranje borrowers tablice s produkcije na development
.pre
dpavlin@koha-dev:/srv/koha-rfid$ ./update-borrowers.sh
.pre
Ovo ฤe stvoriti `borrowers2` tablicu na developmentu i prekopirati sve nove korisnike u `borrowers` tablicu, a postojeฤim korisnicima upisati cardnumber ako je on u meฤuvremenu generiran na produkciji.
^^ update kohe
(pokreฤe sam i parsanje log dataoteka)
.pre
dpavlin@koha-dev:/srv/koha-rfid$ make rfid2koha
.pre
{toc: }
^ Pripreme
| + | Koha 3.0 instalacija - koha.rot13.org - virtualna maลกina na mjesecu | Dobrica | 05.03.2008. |
| + | testni import podataka | Marijana | 05.03.2008. |
| + | demonstracija voditelju knjiลพniฤne i informatiฤke sluลพbe | Marijana | 07.03.2008. |
| + | okupljanje uลพe grupe za implementaciju
[Plan za prvi tjedan (10.03. do 14.03.2008)]
[Tjedan drugi (17.03.2008. - 21.03.2008.)] | | |
| + | otvaranje mailing liste, postavljanje wikija | Iva, Marijana | 11.03.2008 |
| + | sluลพbena obavijest svim knjiลพniฤarima o Kohi, na sastanku o preseljeljenju | Mihel | {link: [09-04-08]} |
^ IMPLEMENTACIJA
| + | Koha 3.0 instalacija na koha.ffzg.hr - test | Dobrica | 07.04.08. |
| + | Instalacija produkcijske verzije | Dobrica | 05.05.08. |
| +/- | globalni [parametri sustava] | Iva i Marijana | |
| + | instalacija servera dobivenog na koriลกtenje od informatiฤke sluลพbe i seljenje Koha produkcije na taj server | Dobrica | 24.05.08. |
| + | [MARC21 struktura zapisa] | Dorja i Marijana | 26.05.08. |
| - | [Izrada predloลพaka] (_frameworks_) | Dorja i Marijana | |
| + | utvrฤivanje polja za "podatke o primjercima"{link: knjiznica [Koha podaci o primjercima]} | Marijana, Iva | 30.04.08. |
| - | "odreฤivanje vrste graฤe, tipova korisnika i pravila posudbe"[Posudba] | Viลกnja | 30.04.08. |
| - | utvrฤivanje naฤina komunikacije sa zatvorenim spremiลกtem | | 30.04.08. |
| + | pripreme za prevoฤenje (po fajlovi) | Marijana | 14.04.08. |
| - | upute za prevoฤenje | | |
| +/- | prevoฤenje | | 31.05.08. |
| - | plan edukacije knjiลพniฤara i materijali za edukaciju | Dorja | 31.05.08. |
| - | edukacija knjiลพniฤara | Dorja | lipanj 2008, rujan 2008 i kontinuiarano |
| - | izrada predloลพaka za printanje naljepnica sa signaturama | | |
| + | prilagoฤavanje suฤelja za unos posataka za jednostavniji pristup podacima o primjercima | Dobrica i Marijana | 19.05.08. |
| - | ureฤivanje prikaza podataka na OPAC-u | Marijana | |
| - | ureฤivanje prikaza podataka na intranetu | Marijana | |
| - | izrada normative za signature | | |
^ *PLAN RADA*
^^ MAPIRANJE
โข pretpostavka migracije
โข pretpostavka signiranja
^^ MIGRACIJA
โข sreฤeni fond
โข ako je mapiranje gotovo
^^ TEHNIฤKA PODRล KA
-โข izraditi --_searchplugin_-- za Firefox i --toolbare-
-โข instalirati firefox 3-
โข instalacija pad-ova
^^ EDUKACIJA PRESIGNIRANJE
โข upute
โข redoslijed prema migraciji
โข individualno
^^ PRESELJENJE ฤASOPISA
โข signiranje zavrลกeno
โข slijedi fiziฤko preseljenje
โข ฤeka se da je podrum gotov
โข kada prostor gotov, oฤistiti (treba vidjeti tko ฤisti โ izvoฤaฤ ili faks)
โข urediti ulaz u sam podrum (rampa, nosaฤi?)
โข trebaju koลกare
โข svakako netko gore i netko dolje tko ฤe nadzirati rad
โข svakako evidencija
โข lijepiti oznake na kompaktuse
^^ PRESELJENJE PASIVNOG FONDA
โข neobraฤeni fond
โข pasivni fond
โข oลกteฤeni fond
โข oznaฤiti u bazi lokaciju
^^ ฤIPIRANJE
โข ฤipiramo li sve knjige ili samo aktivni fond?
โข u starom prostoru
โข ฤim doฤu naljepnice i printer
โข demosi ili praktikanti
โข treba paziti na mjesto lijepljenja ฤipova (3 razliฤite lokacije na zadnjoj stranici prije omota, ali ลกto bliลพe hrptu)
^^ PRESELJENJE AKTIVNOG FONDA
โข koลกare
โข evidencija
โข kontrola
โข nosaฤi pomoฤni radnici
โข lijepljenje naljepnica na kompaktuse
โข ฤiลกฤenje knjiga (alkohol, vata??)
^^ PRESIGNIRANJE
โข u novom prostoru
โข samo aktivni fond
โข zaลกtita naljepnica (zaลกtitna folija -
โข odrediti mjesto lijepljenja naljepnica
โข upisati u bazu (gdje, kako, na ฤemu?)
^^ EDUKACIJA KATALOGIZACIJA
โข upute (originalna i copy katalogizacija)
โข revizija napravljenog
โข organizacija edukacije
> o prvo oni kojima se podaci prvi migriraju
> o vjerojatno individualno (zbog nemoguฤnosti pronalaska adekvatnog prostora)
> o oni koji su preselili graฤu i koji mogu poฤeti katalogizirati (ili prije?)
^^ EDUKACIJA โ DRUGI POSLOVI
โข nabava
โข posudba
โข rezervacije
โข veza sa zatvorenim spremiลกtem
^ POTREBNO NABAVITI
โข zaลกtitna folija
โข alkohol
โข vata (ili neลกto drugo za ฤiลกฤenje knjige)
โข ลกkare
โข olovke
โข "naljepnice za signature"<http://www.marbet.hr/neschen1.php>
โข naljepnice za kompaktuse
โข ฤipovi
^ OPAC templates:
/+/ dodati ikonice za vrstu graฤe (LDR/06) i bibliografsku razinu (LDR/07)
http://www.loc.gov/marc/bibliographic/bdleader.html
.pre
LDR
06 - Type of record
a - Language material
c - Notated music
d - Manuscript notated music
e - Cartographic material
f - Manuscript cartographic material
g - Projected medium
i - Nonmusical sound recording
j - Musical sound recording
k - Two-dimensional nonprojectable graphic
m - Computer file
o - Kit
p - Mixed materials
r - Three-dimensional artifact or naturally occurring object
t - Manuscript language material
07 - Bibliographic level
a - Monographic component part
b - Serial component part
c - Collection
d - Subunit
i - Integrating resource
m - Monograph/Item
s - Serial
.pre
/+/ templates pospremiti u git
* Expanded ne pokazuje Sort by na dobroj poziciji kad je ekran uzak
* Kako dodati/maknuti jezike u limiteru? Nema hrvatskog, nekih jezika nemamo u bazi a nalaze se na popisu, treba provjeriti koji joลก fale
* Kineski i japanski znakovi u Language limiteru?
^ Intranet templates
* advsearch.tmpl - Boolov operator izmeฤu vrsta graฤe i zbirke treba biti AND
^ Items
[Itype migracija - pravila posudbe]
Migraciji je predhodilo ฤiลกฤenje podataka i izrada alata za konverziju.
Dokumentacija o konverziji - http://saturn.ffzg.hr/konverzija
.
| *Teme*
* [Mapiranje u nove signature]
* [Tablice za mapiranje signatura]
* [Redoslijed migracije]
* [Migracija u testnu bazu]
* [Migracija u produkcijsku bazu]
* [Koha bulk import]
* [Koha podaci o primjercima]
* [Lokalne promjene]
* [Holdings - MARC21 standard]
* [Migracija podataka o posudbi] | *!! AKTUALNO !!*
* {link: konverzija[Konvezija ocjenskih radova]}
^^^^ ล to treba napraviti prije migracije?
* definirati "lokacije"[parametri_sustava] (home i holding)
* definirati "vrste graฤe za posudbu"[posudba]
* utvrditi sustav mapiranja za signature -- {link: nova_knjiznica[raspored graฤe u otvorenom pristupu]}
* odrediti pravila za "katalogizaciju"{link: knjiznica [katalogizacija]}
* utvrditi koji se podaci zapisuju na RFID i da li se podaci generiraju u Kohi? |
.
Biljeลกke
* Mora li se MARC framework postaviti prije importa podatka?
* ล to ako se ne postavi?
* Moลพe li se kasnije raditi export u MARC za polja koja se zapisuju u koha bazu, a nisu mapirana?
* [Implementacija posudbe u Kohi]
* [Kalendar]
* [Produลพivanje roka posudbe]
* [Rezervacije u Kohi - implemetacija]
* {link: knjiznica [Pravilnici za posudbu i meฤuknjiลพniฤnu posudbu]}
{toc: }
^ upgrade Kohe
[Upgrade ljeto 2010]
^ printanje iskaznica
* [Printanje i programiranje kartica]
* batch od 100 iskaznica (feeder size)
* members/cardnumbers-generate.pl
* members/cardnumbers-print.pl
* izgubljene iskaznice (blokiranje iskaznice 14 dana, borrowernumber za selfcheck, RFID SID za kopirke)
^ eprints3 upgrade
* Marijana
^ WebGUI
* Upgrade 2010
* LDAP login na ldap.ffzg.hr
^ socialtext
^ monitoring
^ arh-hw zfs pool
* proradio disk controller
^ upgrade WebConvergera za kataloge
^ RFID
* RFID::Serial splitout
** CPR support
Upisi se obavljaju u D-VII u istom danu kad se studenti upisu na faks. Nakon podizanja AAI@EduHr korisniฤkog raฤuna, trebaju se prijaviti u katalog s adrese:
* *https://koha.ffzg.hr/cgi-bin/koha/opac-userupdate.pl*
Tu trebaju provjeriti svoje podatke, popuniti ลกto nedostaje i ispraviti ลกto je krivo. Ako su mijenjali podatke odaberu *"Poลกalji promjene"* pa se onda odjave, a ako je sve u redu samo se odjave.
Time su poslali zahtjev u Knjiลพnicu za izdavanje korisniฤke iskaznice. Iskaznicu ฤe moฤi podiฤi na jesen kad se knjiลพnica otvori.
* imaju veฤu koliฤinu seminarskih radnji koje bi trebalo obraditi
* obradu bi radili asistenti
* dio graฤe bi se digitalizirao
* graฤa bi (kasnije) bila na raspolaganju svim korisnicima Knjiลพnice
^^ Framework Seminarske radnje
{toc: }
^ Postupak oznaฤavanja primjeraka predloลพenih za otpis
U editoru za primjerke, pod statusom "*0 - Otpis*" treba odabrati jednu od ovih oznaka:
> Prijedlog za otpis - uniลกteno
> Prijedlog za otpis - dotrajalo
> Prijedlog za otpis - zastarjelo
Treba detaljnije obrazloลพiti ลกta znaฤi koji od ovih razloga:
Npr. ovo je naฤeno u nekim uputama koje se pozivaju na Pravilnik:
1. Uniลกtena graฤa
- neupotrebljiva graฤa
- izgubljena, otuฤena graฤa
- nevraฤena
2. Dotrajala graฤa
3. Zastarjela graฤa
^ Izvjeลกtaji
Izvjeลกtaji s primjercima oznaฤenim ovim oznakama nalazi se na stranici:
* https://koha.ffzg.hr:8443/reports/otpis/
Izvjeลกtaji se obnavljaju svake noฤi.
Trenutno je u bazi 143 primjerka koji su veฤ oznaฤeni kao otpisani. Treba provjeriti ลกta je to toฤno - da li su to primjerci predloลพeni za otpis?
^ Raspraviti
1.
Ovi razlozi prepisani su iz Pravilnika. Treba li dodati joลก koji razlog? Moลพe li po zakonu postojati joลก koji razlog? - npr. kako obrazloลพiti otpis graฤe koje imamo u prevelikom broju primjeraka?
2.
Ove oznake vide se u OPAC-u. Treba li ih moลพda nekako drugaฤije nazvati (znaฤenje im ostaje isto). Npr. moลพemo ostaviti samo "uniลกteno", "dotrajalo" ili "zastarjelo" (ili ลกto veฤ treba navesti pod razloge.
^ Dokumenti i literatura
* http://narodne-novine.nn.hr/clanci/sluzbeni/308262.html
* http://www.nsk.hr/UserFiles/File/otpis_i_revizija.ppt
Page renamed to [AAI_korisnicki_racuni]
Kad se uvede elektroniฤka inventarna knjiga, bilteni prinova radit ฤe se drukฤije.
Ovo je privremeno rjeลกenje i loลกe je jer je podatke teลกko obnavljati ako se uoฤi greลกka.
Bilteni su na webu: http://mjesec.ffzg.hr/webpac-dev-prinove (ovo je razvojna verzija, kad bude gotovo otiฤi ฤe na novu adresu)
Zapisi su sortirani po autoru i naslovu.
Copy paste u Word trebao bi proฤi uredno. U Wordu se onda doda joลก ลกta treba (naslovnica, header, footer, brojevi stranica...) i pretvori u pdf da se lakลกe printa ako se ลกalje nekome tko ลพeli printati.
_vidi:_ [Kako pretvoriti podatke u pdf?]
*ล to se joลก moลพe napraviti s prikazom podatka?*
* dodati joลก podataka (npr. UDK).
* grupirati (po UDK moลพda? moลพda bolje po struฤnim skupinama iz signatura)
*ล ta da radim kad uoฤim greลกku?*
Ako ih je malo:
Ispraviti u Wordu, ali ispraviti i u Koha bazi (na dva mjesta!)
Ako ih je puno i sve su sliฤne?
Ispraviti samo u Kohi i javiti da treba nove podatke ubaciti u bilten.
{toc: }
^ MySQL baza iz komandne linije
^^ Backup
.pre
$ mysqldump --add-drop-table --single-transaction -u _kohauser_ -p koha > 2008-11-11_koha.sql
$ mysqldump --add-drop-table -u _kohauser_ -p koha issues > 2008-11-11_koha.issues.sql
.pre
http://www.nabble.com/Backing-up-3.0-to21076508.html
^^ Restore
.pre
$ mysql -u _kohauser_ -p koha < 2008-11-11_koha.sql
$ mysql -u _kohauser_ -p koha.issues < 2008-11-11_koha.issues.sql
.pre
^ Restore sa zfs
^^ opr - zfs backup server
.pre
# Find backup snapshot to restore
dpavlin@opl:~$ ./veid2hostname.sh
212052 koha-dev.rot13.org
212056 webpac2.rot13.org
212226 koha.ffzg.hr
dpavlin@opl:~$ sudo zfs list | grep 212226 | tail -3
opl/backup/212226@2010-01-05 662M - 25.4G -
opl/backup/212226@2010-01-06 28K - 25.4G -
opl/clone/212226-mlin 30.0M 24.5G 25.4G /opl/clone/212226-mlin
# make clone to access files
dpavlin@opl:~$ sudo zfs clone opl/backup/212226@2010-01-06 opl/clone/koha-2010-01-06
dpavlin@opl:~$ df -h /opl/clone/koha-2010-01-06
Filesystem Size Used Avail Use% Mounted on
opl/clone/koha-2010-01-06
50G 26G 25G 51% /opl/clone/koha-2010-01-06
.pre
^^ cpio file transfer
* mlin - hardware which provide resources
* opl - machine with backup files
.pre
root@mlin:/virtual.clone# mkdir koha-2010-01-06
root@mlin:/virtual.clone# cd koha-2010-01-06/
# start listener for cpio data transfer
root@mlin:/virtual.clone/koha-2010-01-06# nc -l -p 8888 | pv | cpio --extract --make-directories --preserve-modification-time --numeric-uid-gid --sparse
.pre
.pre
dpavlin@opl:~$ sudo bash
root@opl:~# cd /opl/clone/koha-2010-01-06
root@opl:/opl/clone/koha-2010-01-06# find . | cpio --create | pv | nc 10.60.0.93 8888
.pre
^^ rsync file update
.pre
dpavlin@mlin:~$ sudo rsync -ravH --numeric-ids --sparse --delete --exclude 'backup*' \
10.60.0.90:/opl/clone/koha-2010-01-06/ /virtual.clone/koha-2010-01-06/
real 24m48.767s
user 5m0.027s
sys 2m3.656s
.pre
Kopiranje postojeฤe virtualne maลกine prije rsync-a da bi se smanjilo broj promjena koje treba prenjeti rsync-om:
.pre
dpavlin@mlin:/virtual.clone/koha.ffzg.hr$ time sudo cp -ar * ../koha-2010-01-06/
real 14m59.742s
user 0m0.932s
sys 0m38.278s
.pre
^ Virtualna maลกina
Nakon restora sa zfs-a treba napraviti sljedeฤa podeลกavanja:
^^ Pokrenuti screen u kojem ฤe biti virtualna maลกina
.pre
dpavlin@mlin:~$ screen -S koha-upgrade
.pre
^^ Filesystem
.pre
lvcreate -s /dev/vg/koha -L 80G -n koha-upgrade
root@mlin:~# mount /dev/vg/koha-upgrade /virtual.clone/koha-upgrade/
root@mlin:~# df /virtual.clone/koha-upgrade/
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg-koha--upgrade
82569904 56551456 26018448 69% /virtual.clone/koha-upgrade
.pre
^^ Start LXC
.pre
root@mlin:~# cd /srv/sysadmin-cookbook/recepies/lxc/
root@mlin:/srv/sysadmin-cookbook/recepies/lxc# ./ve2lxc.sh /virtual.clone/koha-upgrade/ 10.60.0.253 koha-upgrade
.pre
^^ Setup inside LXC
* ugasiti monit `apt-get remove monit`
* -provjeriti IP adrese u `/etc/apache2/sites-enabled/`-
^ BTRFS
.pre
root@opl:~# zfs clone opl/backup/212226@2010-03-06 opl/clone/koha-2010-03-06
.pre
.pre
root@prod:/virtual# time rsync -rav --exclude 'backup/*' --delete 10.60.0.90::clone/koha-2010-03-06/ /virtual/koha/
receiving incremental file list
...
sent 3297036 bytes received 4392640729 bytes 6527004.85 bytes/sec
total size is 23473104677 speedup is 5.34
real 11m13.873s
user 1m15.985s
sys 0m39.890s
root@prod:/virtual# btrfsctl -s /virtual/koha@2010-03-06 /virtual/koha
operation complete
Btrfs Btrfs v0.19
root@prod:/virtual# btrfsctl -s /virtual/koha-242 /virtual/koha
operation complete
Btrfs Btrfs v0.19
dpavlin@prod:~$ sudo bash ve2lxc.sh /virtual/koha-242 10.60.0.242 koha-242
.pre
Datum isteka ฤlanstva za studente sada je usklaฤen je s podacima iz LDAP-a (to je baza u kojoj se ฤuvaju AAI korisniฤki raฤuni), tako da ne treba viลกe studentima pruduลพivati ฤlanstvo ruฤno. Ako sad u Kohi piลกe da im je isteklo ฤlanstvo, to znaฤi da im je istekao AAI korisniฤki raฤun. Svim studentima za koje postoji podatak iz referade da su upisani na studij, taj datum je automatski unesen. Narvno uvijek sluฤajeva za koje to nije bilo moguฤe uฤiniti automatski (najฤeลกฤe stariji studenti). Takve studente treba zamoliti da odu produลพiti AAI raฤun Draganu Doลกenu (ponedjeljkom i srijedom od 12 do 14 sati) koji ฤe im to ฤlanstvo produลพiti ako imaju na to pravo.
Kad se novi korisnik upiลกe u bazu, taj datum mu se odmah uฤita iz LDAP-a (nije viลกe godina dana od uฤlanjenja, veฤ datum kad im istiฤu studentska prava).
Uvidom u bazu korisnika otkrivena je velika koliฤina korisnika koji su upisani bez AAI korisniฤkog raฤuna. To stvara probleme na raznim razinama, pa bi trebalo sto vise reducirati upisivanje korisnika bez AAI i ฤiniti to u stvarno iznimnim sluฤajevima.
*Pitanja i odgovori:*
*P:* Veฤ smo imali nekoliko korisnika kojima smo ruฤno produljili ฤlanstvo. Zanima me da li je to nemogu uฤniti ako nemaju prava ili produljen AAI raฤun. Jer ako je moguฤe onda smo malo zeznuli stvar.
ili
Ako sam SLUฤAJNO stisla renewal; i produลพila starom korisniku ฤlanstvo (korisnik ima prava do 9.mj. 2010.), ฤlanstvo se produลพilo do 04.03.2011... mogu li i trebam li je slati u informatiฤku?
*O:* Ne, sve je u redu. U sljedeฤem obnavljanju podataka koje ฤemo raditi periodiฤki, stvar ฤe se sama uskladiti sa stanjem u LDAP bazi.
{toc: }
^ Opac
Poboljลกan *prikaz podataka* u OPAC-u, na stranici s rezultatima i na stranici s detaljnim opisom:
* Dodan prikaz svih lokacija i signatura na stranicu s rezultatima pretraลพivanja.
* Postojanje polja 856u na stranici s rezultatima viลกe ne uzrokuje nestajanje podataka o fiziฤkoj dostupnosti.
* Sakriven podatak o izgubljenim primjercima na stranici s rezultatima.
* Dodano polje 245c (odgovornost) - prije nije bilo jasno tko je autor, prevodioc, urednik i dr.
* Dodano mjesto izdavanja. Ureฤen prikaz podataka za sluฤajeve s viลกe mjesta izdavanja i viลกe izdavaฤa.
Doลกlo s novom verzijom:
* (djelomiฤno) popravljen prikaz lokacije i signature na stranici s rezultatima
* lost items na stranici s rezultatima ne prikazati (niti na detaljnoj stranici, ali tamo je radilo i prije)
* search history
* pretraลพivanje po jeziku (ne radi!)
* more searches - sada se to radi preko admin suฤelja, ne viลกe kroz template
* slanje e-maila iz carta omoguฤeno je samo logiranim korisnicima
*Treba joลก:*
* urediti kriterije za sortiranje rezultata
* refine search - dodati lokaciju ili struฤnu oznaku iz signature (razmisliti kako dobiti taj podatak, raspraviti)
* pretraลพivanje po jeziku
* prikaz nakladniฤke cjeline kad je u polju 490
* more searches - dodati relevantne izvore
* _OpacNav_ - dodatna navigacija s korisnim linkovima - gdje to staviti (lijevo, desno) i kako formatirati?
* urediti i prevesti poruke koje se primaju iz popisa i odabranih naslova - treba li joลก koji podatak, npr. broj iskaznice dodati u mail koji se dobije iz Carta
* kada si na skraฤenom zapisu, kao drugu opciju zapisa vidis samo Potpuni zapis (MARC), a kada si na Potpunom zapisu onda imas i Expanded MARC View i ISBD View
* u normalnom prikazu, na kraju svake skupine se vidi tocka (iza razmaka) - bilo bi dobro da se tocka vidi samo iza godine
*Raspraviti:*
U normalnom prikazu (tj. skracenom zapisu) i u eng. verziji trenutno pise "predmetnice" za subjects, a malo su problematicni i autori (additional authors), a i 'serija' je upitna.
U rezultatima pretrazivanja ISBN se ne vidi. Vidi se u detaljnom prikazu. Treba li se vidjeti i na rezultatima?
moze li se u opacu sakriti samo jedan od itema, onako kako se moze sakriti zapis...radi se o itemima koji su kod nas u kancelarijama i koji nikad nece ici u fond iako su u bazi, tipa Verona, UDK itd...
(moลพda to nekako drukฤije oznaฤiti, povezano s problemom obrade knjiga koje se nabavljaju iz projekata)
LibraryName ?
^ Intranet
^^ Cirkulacija
Cirkulacija nije testirana za sve sluฤajeve pa se desilo da je Koha poฤela *onemoguฤavati posudbu* onim korisnicima koji su prekoraฤili rok za vraฤanje.
To je dobra opcija, ali je nezgodno ispalo ลกto to nismo najavili.
*Treba:*
Sloลพiti tako da se korisniku progleda kroz prste dan ili dva, a ne ovako kako je sada da im ne omoguฤava posuditi novo ฤak i ako im danas istiฤe rok posudbe.
*Bugs:*
* selfcheck na papiriฤu koji izbaci pod "dokumente vratiti do" ne piลกe datum nego neki broj ili kod...
*Raspraviti:*
_Location processing_
permanent_location - sysprefs <http://koha.org/documentation/manual/3.2/circulation/in-processing-book-cart-locations>.
Da li nam treba PROC i CART?
^^ Katalog - prikaz podataka i pretraลพivanje
*NORMAL prikaz* sada izgleda kao ISBD! Na mjestu napomene je samo podatak iz 500a (za ocjenske radove joลก i 567a, a treba dodati i 502a). Sve napomene (polja 50X) trebale bi se nalaziti se pod _Descriptions_ tabom.
*Prikaz ISBD maknut* je iz menija zato ลกto prikaz Normal sada ima ISBD fromat. Taj prikaz imao je puno nedostataka, a meฤu najvaลพniji su prikaz podataka o izdavanju, URL-a i problemi s intepunkcijama.
Dodani su *linkovi na povezani zapis* - od skupnog prema primjercima (Look for related records) i od primjeraka prema skupnom (Collection). Treba popraviti tako da pretraลพuje samo preko polja 035a, a ne preko kljuฤnih rijeฤi. Link bi se trebalo pokazivati samo na onim zapisima koji u leaderu imaju oznaku za related record.
*Inventarni broj se sada prikazuje u tablici s primjercima* na obje stranice rezultata (results i detail).
Dodana je moguฤnost *pretraลพivanja po zbirci* preko suฤelja za napredno preraลพivanje.
Napravljen novi *firefox plugin* za pretraลพivanje kataloga prema
inventarnom broju
*Treba joลก:*
* vratiti inv. broj na stranicu s rezultatima
* Koje napomene prikazati u ISBD-u, a koje ispod taba "Descriptions"
** napomena o transliteraciji
* edukacija o pretraลพivanju uz pomoฤ ccl sintakse
* LCCN (tj. 035$a) maknuti iz prikaza podataka u Z39.50 klijentu, koลกari i popisima
* popraviti pretraลพivanje po jeziku
* sloลพiti zebru tako da pogaฤa rijeฤi u pretraลพivanju za sva polja osim signature (koje joลก polje ne treba pogaฤanje rijeฤi?)
* maknuti authority nomber iz prikaza podataka u detaljnom prikazu
* popraviti gresku koja se javlja nakon brisanja zapisa (vidi: [Zebra indexing])
* u rezultatima pretraลพivanja pokazati ISBN i ISSN
*Upstream:*
* Keywords to MARC mapping - prikaz podataka u intranet normal view
^^ Obrada
Moguฤnost *micanja primjeraka* s jednog na - tehniฤki radi, praktiฤno treba definirati postupak - koji zapis ostaje koji se briลกe, tko smije brisati zapis, na ลกta sve treba paziti. (vidi: [Premjeลกtanje primjeraka s jednog na drugi bibliografski zapis])
No, imamo i moguฤnost *spajanje zapisa* preko jako dobrog suฤelja (moramo ga istestirati prije nego krenemo za pravo raditi).
ล to ฤe nam micanje primjeraka ako imamo spajanje zapisa? Moลพda dobro doฤe ako podjelimo uloge ลกta ko radi. Moลพda pomoฤni mogu micati primjerke kad ih uoฤe, a predmetni kasnije spajaju bib zapise.... ne znam, nekako, treba vidjeti ลกta je praktiฤno a opet s druge strane da se ne dese greลกke.
*Plugin za 008* - link na "MARC Code List ....)"<http://www.loc.gov/marc/languages/language_code.html> sada se otvara
u novom prozoru.
Doลกlo s novom verzijom:
* moguฤnost dodavanja viลกe primjeraka odjednom
* moguฤnost micanja primjeraka s jednog na drugi bib zapis
* granularne ovlasti za katalogizaciju
*Treba joลก:*
* Instalirati dodatak za generiranje signatura u zatvorenom spremiลกtu - {link: koha-cug [Pisanje Koha plugina] }
* Barcode - window title: kad je naslov predugaฤak onda se barcode ne vidi, pa se ne moลพe ฤipirati
* nestao minusiฤ kod inventarnog broja i kod 035 plus dosta toga na nuli
* provjeriti plugine za leader i 008
*Raspraviti:*
Kad se dodaje novi zapis, nakon klika na Save otvara se suฤelje "Add Item", a ako se zapis editira, onda se otvara normal (koji izgleda kao ISBD).
Kako bi se to trebalo ponaลกati?
----
Postojao je bug u OPAC-u kod brisanja zapisa, no taj bug se moลพe jednostavno zaobiฤi. Naime, kad pobriลกemo zapis, u OPAC-u se na neko vrijeme potrga pretraลพivanje po rijeฤima koje daju u rezultatima taj zapis. Ako je rezultat za taj zapis na prvoj stranici, onda se ne dobiju nikakvi rezultati nego priliฤno loลกa greลกka. Ako je rezultat za taj zapis na drugoj stranici onda se strga na toj stranici. Greลกka se deลกava zbog toga ลกto Zebra (program za indeksiranje zapisa) nije joลก stigla obnoviti zapis, a suฤelje za pretraลพivanje ga ne zna preskoฤiti. Bug smo uspjeli zaobiฤi, sada OPAC radi bez greลกke, ali to treba pooraviti kako spada. Da nismo zaobiลกli ovaj bug, greลกka bi se se mogla izbjeฤi tako da zapis najprije oznaฤimo oznakom "Sakrij u
OPAC-u" u polju 942, a tek onda ga obriลกemo.
^^ Novosti na naslovnici
Treba dati svim knjiลพniฤarima ovlasti da piลกu obavijesti koje se vide na poฤetnoj stranici u intranetu.
^ Prijevodi
Dio oznaka na engleskom suฤelju je napisano na hrvatskom. To treba popraviti, al nije jednostavno.
Doลกlo s novom verzijom:
* novi wrapper za instalaciju prijevoda - ne radi :)
^ Instalacija
.pre
[Tue Feb 16 15:29:31 2010] Makefile.PL: Warning: prerequisite Graphics::Magick not found.
[Tue Feb 16 15:29:31 2010] Makefile.PL: Warning: prerequisite IPC::Cmd 0.46 not found. We have 0.401.
[Tue Feb 16 15:29:31 2010] Makefile.PL: Warning: prerequisite Lingua::Stem::Snowball 0.952 not found.
[Tue Feb 16 15:29:31 2010] Makefile.PL: Warning: prerequisite Memoize::Memcached 0.03 not found.
[Tue Feb 16 15:29:31 2010] Makefile.PL: Warning: prerequisite Number::Format 1.52 not found.
[Tue Feb 16 15:29:32 2010] Makefile.PL: Warning: prerequisite PDF::API2::Simple 1 not found.
[Tue Feb 16 15:29:32 2010] Makefile.PL: Warning: prerequisite PDF::Table not found.[Tue Feb 16 15:29:32 2010] Makefile.PL: Warning: prerequisite Storable 2.21 not found. We have 2.18.
[Tue Feb 16 15:29:32 2010] Makefile.PL: Warning: prerequisite Test::More 0.8 not found. We have 0.72.
[Tue Feb 16 15:29:32 2010] Makefile.PL: Warning: prerequisite Text::CSV::Encoded 0.09 not found.
.pre
* [SIP2]
* [LDAP]
^ Admin
iskljuฤiti Amazon, ukljuฤiti Google
Enhanced content: Amazon AWS private key (naknadno, treba li nam uopฤe?)
*Upstream:*
* lijepo novo suฤelje za sysprefs
* nove sysprefs opcije
^ Migracija items.itemnotes u items.copynumber
* backup items.itemnotes
* itemnotes je mediumtext, copynumber je varchar(32) - treba ispraviti zapise u itemnotes duลพe od 32 znaka
* premapirati items.itemnotes
* pokrenuti skriptu `./misc/maintenance/sync_items_in_marc_bib.pl` ( _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. _ )
.pre
mysql> update items set copynumber = itemnotes ;
Query OK, 316711 rows affected, 11 warnings (59.70 sec)
Rows matched: 317021 Changed: 316711 Warnings: 11
mysql> SHOW WARNINGS ;
+---------+------+------------------------------------------------------+
| Level | Code | Message | bib item
+---------+------+------------------------------------------------------+
| Warning | 1265 | Data truncated for column 'copynumber' at row 10021 |
| Warning | 1265 | Data truncated for column 'copynumber' at row 12687 |
| Warning | 1265 | Data truncated for column 'copynumber' at row 133128 |
| Note | 1265 | Data truncated for column 'copynumber' at row 148603 | 118292 149220 lin13531
| Warning | 1265 | Data truncated for column 'copynumber' at row 234903 |
| Warning | 1265 | Data truncated for column 'copynumber' at row 240681 |
| Note | 1265 | Data truncated for column 'copynumber' at row 252496 | 203477 253517 etn6059
| Note | 1265 | Data truncated for column 'copynumber' at row 267457 | 216220 268698 psiF-54
| Warning | 1265 | Data truncated for column 'copynumber' at row 272653 |
| Warning | 1265 | Data truncated for column 'copynumber' at row 277954 |
| Warning | 1265 | Data truncated for column 'copynumber' at row 282443 |
+---------+------+------------------------------------------------------+
11 rows in set (0.00 sec)
mysql> select biblionumber, itemnumber, itemnotes , copynumber from items where itemnotes != copynumber ;
+--------------+------------+----------------------------------------------------------------------------------+-----------------------------------+
| biblionumber | itemnumber | itemnotes | copynumber |
+--------------+------------+----------------------------------------------------------------------------------+-----------------------------------+
| 7468 | 10092 | slf56588 (nisu otisnute sve str.) | slf56588 (nisu otisnute sve str. |
| 8899 | 12778 | slf67394 (bibliofilski primjerak) | slf67394 (bibliofilski primjerak |
| 104612 | 133701 | filDodatni pod. o odgovornosti: Gottfried Gabriel | filDodatni pod. o odgovornosti: |
| 189568 | 235908 | rom13568,13569,13569/f-a,13569/f-b,13569/f-c,13569/f-d,13569/f-e,13569/f-f,13570 | rom13568,13569,13569/f-a,13569/f |
| 192861 | 241688 | rom1792/2,1792/4,1792/5,1792f/f,1792f/h,26379E | rom1792/2,1792/4,1792/5,1792f/f, |
| 220139 | 273925 | pum66/1996 (u RS, nedostaju str. s tablama: 208-215 ) | pum66/1996 (u RS, nedostaju str. |
| 224967 | 279247 | pumล AR/1987a(neuvezani primjerak) | pumล AR/1987a(neuvezani primjerak |
| 227773 | 283828 | ang1000/AMS do 1084/AMS (84 copies) | ang1000/AMS do 1084/AMS (84 copi |
+--------------+------------+----------------------------------------------------------------------------------+-----------------------------------+
8 rows in set (0.95 sec)
mysql> update items set itemnotes = null ;
Query OK, 316711 rows affected (43.04 sec)
Rows matched: 317021 Changed: 316711 Warnings: 0
.pre
^ Koha to MARC mapping
| | upgrade | sada u produkciji | demo | default framework | irb |
| biblio.frameworkcode | 942b | 942b | | nema polja | |
| biblio.notes | | 653a | 500a | 500a | 500a |
| biblio.copyrightdate | | niลกta | 260c | 260c | 260c* |
| biblio.abstract | 080a | 080a | 520a | 520a | 520a |
| biblioitems.volume | 245p | 245n | 440v | 440v | 440v |
| biblioitems.number | 245n | 942d | 440n | 440n | 440n |
| biblioitems.publicationyear | 260c | 260c | niลกta | niลกta | 260c* |
| biblioitems.volumedesc | 362a | 245p | 362a | 362a | 362a |
| biblioitems.collectiontitle | 773t | 773t | niลกta | niลกta | niลกta |
| biblioitems.collectionissn | 773z | niลกta | niลกta | niลกta | niลกta |
| biblioitems.collectionvolume | 773g | 773g | niลกta | niลกta | niลกta |
| biblioitems.editionstatement | 250a | 250a | niลกta | niลกta | niลกta |
| biblioitems.lccn | 035a | 035a | 010a | 010a | 010a |
| items.itemnotes | 952z | 952i** | 952z | 952z | 952z |
| items.copynumber | 952t | niลกta | 952t | 952t | 952t |
*mapirano dva puta
**polje dodano u framework (nema ga default framework)
^^ Rebuild biblio tables
.pre
mglavica@koha-2010-02-15:/usr/share/koha/bin$ ./batchRebuildBiblioTables.pl -c
..................................................225350 in 37818.0600130558 s
...Can't call method "field" on an undefined value at ./batchRebuildBiblioTables.pl line 64.
.pre
editirati zapis 225354 i pokuลกati ponovo
^^ Sync items in marc bib
.pre
mglavica@koha-2010-02-15:/usr/share/koha/bin/manintenance/sync_items_in_marc_bib.pl --run-update
Could not retrieve bib 225771 from the database - record is corrupt.
Could not retrieve bib 225773 from the database - record is corrupt.
Could not retrieve bib 225774 from the database - record is corrupt.
Could not retrieve bib 229768 from the database - record is corrupt.
Could not retrieve bib 229811 from the database - record is corrupt.
Could not retrieve bib 231170 from the database - record is corrupt.
Could not retrieve bib 236269 from the database - record is corrupt.
Could not retrieve bib 231170 from the database - record is corrupt.
Could not retrieve bib 241167 from the database - record is corrupt.
Could not retrieve bib 241457 from the database - record is corrupt.
Could not retrieve bib 242341 from the database - record is corrupt.
Could not retrieve bib 245586 from the database - record is corrupt.
Embedded item synchronization report
------------------------------------
Number of bibs checked: 246606
Number of bibs modified: 232417
Number of item fields removed from bibs: 317032
Number of item fields added to bibs: 317030
Number of bibs with errors: 11
.pre
.pre
mysql> select title, biblioitems.biblionumber, biblioitems.biblioitemnumber, marc, marcxml from biblioitems joiitems.biblionumber where marcxml = '' ;
+--------------------------------------------------+--------------+------------------+------+---------+
| title | biblionumber | biblioitemnumber | marc | marcxml |
+--------------------------------------------------+--------------+------------------+------+---------+
| Priruฤni anatomski atlas : | 225771 | 225771 | NULL | |
| Priruฤni anatomski atlas : | 225773 | 225773 | NULL | |
| Priruฤni anatomski atlas : | 225774 | 225774 | NULL | |
| Zlatan ฤovek | 229768 | 229768 | NULL | |
| Tko govori, tko piลกe : | 229811 | 229811 | NULL | |
| Stupnjevi organskog i ฤovjek : | 231170 | 231170 | NULL | |
| Ispravci i dopune starijoj hrvatskoj historiji / | 236269 | 236269 | NULL | |
| Deutsch : | 241167 | 241167 | NULL | |
| Tradition och fรถrnyelse inom sprรฅket : | 241457 | 241457 | NULL | |
| Geneza ustaลกkog pokreta : | 242341 | 242340 | NULL | |
| Social emergence : | 245586 | 245585 | NULL | |
+--------------------------------------------------+--------------+------------------+------+---------+
11 rows in set (3 min 48.40 sec)
.pre
pobrisati te zapise.
{file: bib-bez-marc.xls}
.pre
mysql> delete from biblio where biblionumber = 225771 or biblionumber = 225773 or biblionumber = 225774 or biblionumber = 229768 or biblionumber = 229811 or biblionumber = 231170 or biblionumber = 236269 or biblionumber = 241167 or biblionumber = 241457 or biblionumber = 242341 or biblionumber = 245586 ;
Query OK, 11 rows affected (0.68 sec)
.pre
drugi pokuลกaj rebuild biblio tables zapne ovako
.pre
..................................................241600 in 4839.90223407745 s
..................................................241650 in 4843.83456802368 s
.................Can't call method "field" on an undefined value at ./batchRebuildBiblioTables.pl line 64.
mysql> select * from biblioitems where biblionumber = 242219 ;
Empty set (0.00 sec)
.pre
i taj zapis treba pobrisati
.pre
mysql> delete from biblio where biblionumber = 242219 ;
Query OK, 1 row affected (0.31 sec)
.pre
^ Izvjeลกtaji
* signature
* biblioitems.publisherdate -> biblio.copyrightdate
^ Patrons
`EnhancedMessagingPreferences`
Upstream:
* popravljen encoding u slanju e-maila preko opac user update
^ Serials
promjenjeno, testitari
Admin - Cataloging preferences - Record Structure - Routing Serials:
*Add* extra information to items automatically added to serials.
*Upstream:*
* popravljeno dodavanje primjeraka
* doraฤene reklamacije
^ Nabava
Ovlasti za knjiลพniฤare
definirati uloge za nabavu i sukladno tome podesiti ovlasti
*Upstream*
* novi modul - granular permissions, hijerarhije budลพeta, planiranje
* opcije za stvaranje primjeraka - prilikom nabave, u prijemu, u katalogizaciji
^ Procedura za produkciju
* prije instalacije pobrisane sessions i zebraqueue tablice
* pobrisani bibliografski zapisi bez biblio.marc polja (saฤuvati pobrisane zapise)
.pre
mysql> select title, biblioitems.biblionumber, biblioitems.biblioitemnumber, marc, marcxml from biblioitems join biblio on biblio.biblionumber=biblioitems.biblionumber where marc is null ;
+--------------------------------------------------+--------------+------------------+------+---------+
| title | biblionumber | biblioitemnumber | marc | marcxml |
+--------------------------------------------------+--------------+------------------+------+---------+
| Priruฤni anatomski atlas : | 225771 | 225771 | NULL | |
| Priruฤni anatomski atlas : | 225773 | 225773 | NULL | |
| Priruฤni anatomski atlas : | 225774 | 225774 | NULL | |
| Zlatan ฤovek | 229768 | 229768 | NULL | |
| Tko govori, tko piลกe : | 229811 | 229811 | NULL | |
| Stupnjevi organskog i ฤovjek : | 231170 | 231170 | NULL | |
| Ispravci i dopune starijoj hrvatskoj historiji / | 236269 | 236269 | NULL | |
| Deutsch : | 241167 | 241167 | NULL | |
| Tradition och fรถrnyelse inom sprรฅket : | 241457 | 241457 | NULL | |
| Geneza ustaลกkog pokreta : | 242341 | 242340 | NULL | |
| Social emergence : | 245586 | 245585 | NULL | |
+--------------------------------------------------+--------------+------------------+------+---------+
11 rows in set (34.63 sec)
mysql> delete from biblio where biblionumber = 225771 or biblionumber = 225773 or biblionumber = 225774 or biblionumber = 229768 or biblionumber = 229811 or biblionumber = 231170 or biblionumber = 236269 or biblionumber = 241167 or biblionumber = 241457 or biblionumber = 242341 or biblionumber = 245586 ;
Query OK, 11 rows affected (0.10 sec) ;
.pre
{file: bib-bez-marc.xls}
* pobrisan biblio zapis bez podataka u biblioitems tablici
.pre
delete from biblio where biblionumber = 242219 ;
Query OK, 1 row affected (0.00 sec)
.pre
{file: biblio-bez-biblioitems.xls}
.pre
mysql> select count(*) from biblio ;
+----------+
| count(*) |
+----------+
| 246779 |
+----------+
1 row in set (0.20 sec)
mysql> select count(*) from biblioitems ;
+----------+
| count(*) |
+----------+
| 246779 |
+----------+
1 row in set (11.73 sec)
mysql> select count(*) from items ;
+----------+
| count(*) |
+----------+
| 317896 |
+----------+
1 row in set (0.50 sec)
mysql> select count(*) from items where itemnotes is null ;
+----------+
| count(*) |
+----------+
| 322 |
+----------+
1 row in set (1.00 sec)
.pre
* preseliti itemnotes u copynumber
.pre
mysql> update items set copynumber = itemnotes ;
Query OK, 317574 rows affected, 8 warnings (57.21 sec)
Rows matched: 317896 Changed: 317574 Warnings: 8
mysql> show warnings ;
+---------+------+------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------+
| Warning | 1265 | Data truncated for column 'copynumber' at row 10021 |
| Warning | 1265 | Data truncated for column 'copynumber' at row 12687 |
| Warning | 1265 | Data truncated for column 'copynumber' at row 133126 |
| Warning | 1265 | Data truncated for column 'copynumber' at row 234900 |
| Warning | 1265 | Data truncated for column 'copynumber' at row 240678 |
| Warning | 1265 | Data truncated for column 'copynumber' at row 272650 |
| Warning | 1265 | Data truncated for column 'copynumber' at row 277951 |
| Warning | 1265 | Data truncated for column 'copynumber' at row 282440 |
+---------+------+------------------------------------------------------+
8 rows in set (0.00 sec)
mysql> select biblionumber, itemnumber, itemnotes , copynumber from items where itemnotes != copynumber ;
+--------------+------------+----------------------------------------------------------------------------------+-----------------------------------+
| biblionumber | itemnumber | itemnotes | copynumber |
+--------------+------------+----------------------------------------------------------------------------------+-----------------------------------+
| 7468 | 10092 | slf56588 (nisu otisnute sve str.) | slf56588 (nisu otisnute sve str. |
| 8899 | 12778 | slf67394 (bibliofilski primjerak) | slf67394 (bibliofilski primjerak |
| 104612 | 133701 | filDodatni pod. o odgovornosti: Gottfried Gabriel | filDodatni pod. o odgovornosti: |
| 189568 | 235908 | rom13568,13569,13569/f-a,13569/f-b,13569/f-c,13569/f-d,13569/f-e,13569/f-f,13570 | rom13568,13569,13569/f-a,13569/f |
| 192861 | 241688 | rom1792/2,1792/4,1792/5,1792f/f,1792f/h,26379E | rom1792/2,1792/4,1792/5,1792f/f, |
| 220139 | 273925 | pum66/1996 (u RS, nedostaju str. s tablama: 208-215 ) | pum66/1996 (u RS, nedostaju str. |
| 224967 | 279247 | pumล AR/1987a(neuvezani primjerak) | pumล AR/1987a(neuvezani primjerak |
| 227773 | 283828 | ang1000/AMS do 1084/AMS (84 copies) | ang1000/AMS do 1084/AMS (84 copi |
+--------------+------------+----------------------------------------------------------------------------------+-----------------------------------+
8 rows in set (1.20 sec)
mysql> update items set itemnotes = 0 ;
Query OK, 317896 rows affected (28.21 sec)
Rows matched: 317896 Changed: 317896 Warnings: 0
.pre
* Koha to MARC mapping - premapirana polja
* pokrenut rebuildBiblioTables
* Keywords to MARC mapping - definirane keywords
* sysadmin - staff - intranetstylesheet
* sysadmin - opac - stylesheet
* popravljeni frameworks - 952i 952z 952r
* pokrenut syncitems
.pre
Embedded item synchronization report
------------------------------------
Number of bibs checked: 246779
Number of bibs modified: 232631
Number of item fields removed from bibs: 317898
Number of item fields added to bibs: 317896
Number of bibs with errors: 0
.pre
* pokrenuti rebuild zebra
.pre
...
06:35:43-21/02 zebraidx(1905) [log] Records: 246779 i/u/d 246510/269/0
...
NOTHING cleaned : the export /tmp/KXMJFxLzlj has been kept.
...
.pre
* prijevodi
* testirano slanje maila iz cart i liste
* testirano update user record (popravljen encoding!)
* preseliti (kako?) more_subfields_xml u itemnotes
* maknuti sliฤice s mjeseca
* testirati nove template - ne radi select all
----
Mozda sam negdje preskocila u tekstu - ali ne radi bas pretrazivanje preko kohe - npr. ako utipkam u onaj mali prozorcic gore ped15322 ne izbaci mi nista jer ulovi jos neke oznake prije. isto se dogodilo i kad sam isla preko search s naslovom knjige.
_contributed by {user: vnovosel@ffzg.hr} on {date: 2010-02-22 11:13:56 GMT}_
Na testnoj instalaciji Kohe - https://koha-upgrade.vbz.ffzg.hr:8443/ moลพe se probati spajanje zapisa. Detaljnije ฤemo o tome razgovarati u ฤetvrtak, 04.03.2010. kad se vidimo, a ako neko ลพeli prije toga istraลพivati sam, evo kratkih uputa:
1. Identificirati zapise koje treba spojiti i odabrati jedan najpotpuniji, zapisati njegov biblionumber
2. Dodati zapise na listu, prema uputama na stranici [upute] u poglavlju Baratanje popisima. Popis neka bude javan (public) - na taj naฤin ฤe svi knjiลพniฤari moฤi vidjeti da je taj zapis veฤ u proceduri i to ฤe sprijeฤiti situaciju da dvije osobe rade na spajanju istog naslova. Popis treba nazvati nekako prema sebi (staviti svoje ime, inicijale, ลกta god.. dogovorit ฤemo se u ฤetvrtak)
3. Otiฤi na taj popis - tu ฤete uoฤiti opciju "Merge selected items" - odabrati dva zapisa s liste i kliknuti na taj gumbiฤ
4. isprobavati ลกta se deลกava
Bilo bi jako dobro da probate, tako da se ลกto bolje pripremimo za ฤetvrtak.
Popravljeni su problemi s upisom korisnika. Od sada znaฤi upisujemo po starom - prvo se ฤovjek logira u OPAC, a onda ga mi naฤemo preko intraneta, provjerimo "povuฤene" podatke i nadopunimo ลกta fali. Identifikacijski brojevi opet po starom idu u posebna polja. Primijetit ฤete da se meฤu tim identifikacijskim brojevima pojavio i jedan novi, zove se RFID_SID. To ne dirate, podatak se u to polje upisuje automatski, a sluลพi sustavu kopiranja.
Popravljen je Firefox dodatak za pretraลพivanje Kohe prema inv. broju. Novu verziju moลพete instalirati sa stranice <http://mjesec.ffzg.hr/koha/firefox/>. Najprprije obavezno treba maknuti staru verziju, ovako:
klik na strelicu - manage search engines - klikk na Koha ID - remove - OK
^^ Komponente sustava
Shema prikazuje komponente softverskog sustava u "Knjiลพnici Filozofskog fakulteta u Zagrebu"<http://knjiznica.ffzg.hr/>.
{image: sustav.png}
^^ Virtual LDAP
Za prijenos podataka o korisnicima meฤu sustavima koristi se [LDAP].
{image: virtual_ldap.png}
http://contribs.koha.org/extensions.php?category=9
created by Kyle Hall, http://www.kylehall.info
Na stranici [Upgrade drugi] nalaze se biljeลกke o nadogradnji sustava uฤinjenoj 20.02.2010. Molimo sve knjiลพniฤare da prate sadrลพaj u prva tri poglavlja (OPAC, Intranet i Prijevodi) i da jave sve ลกto tamo ne piลกe, a trebalo bi. Slobodno javite mailom i one stvari koje veฤ piลกu, tako ฤemo lakลกe odrediti prioritete.