| | 94 | <method name="getVolIssueJournal"> |
| | 95 | <parameter name="item"/> |
| | 96 | <body> |
| | 97 | <![CDATA[ |
| | 98 | var fieldID = Zotero.ItemFields.getFieldIDFromTypeAndBase(item.itemTypeID, 'volume'); |
| | 99 | var itemVol = item.getField(fieldID); |
| | 100 | |
| | 101 | var fieldID = Zotero.ItemFields.getFieldIDFromTypeAndBase(item.itemTypeID, 'issue'); |
| | 102 | var itemIssue = item.getField(fieldID); |
| | 103 | |
| | 104 | if (!itemIssue) { |
| | 105 | var extra = item.getField('extra'); |
| | 106 | var m = extra.match(/\{:issue:\s*([^\}]*)\}/); |
| | 107 | if (m) { |
| | 108 | itemIssue = m[1]; |
| | 109 | } |
| | 110 | } |
| | 111 | var volIssue = []; |
| | 112 | if (itemVol) { |
| | 113 | volIssue.push(itemVol); |
| | 114 | } |
| | 115 | if (itemIssue) { |
| | 116 | volIssue.push(itemIssue); |
| | 117 | } |
| | 118 | volIssue = volIssue.join(":"); |
| | 119 | var volIssueJournal = []; |
| | 120 | if (volIssue) { |
| | 121 | volIssueJournal.push(volIssue); |
| | 122 | } |
| | 123 | // Journal name, short if poss. |
| | 124 | var journalName = false; |
| | 125 | if (item.getField('journalAbbreviation')) { |
| | 126 | journalName = item.getField('journalAbbreviation'); |
| | 127 | } |
| | 128 | if (!journalName) { |
| | 129 | var fieldID = Zotero.ItemFields.getFieldIDFromTypeAndBase(item.itemTypeID, 'publicationTitle'); |
| | 130 | journalName = item.getField(fieldID); |
| | 131 | } |
| | 132 | if (!journalName) { |
| | 133 | journalName = item.getField('reporter'); |
| | 134 | } |
| | 135 | if (!journalName) { |
| | 136 | journalName = item.getField('code'); |
| | 137 | } |
| | 138 | if (journalName) { |
| | 139 | volIssueJournal.push(journalName); |
| | 140 | } |
| | 141 | return volIssueJournal.join(" "); |
| | 142 | ]]> |
| | 143 | </body> |
| | 144 | </method> |
| | 145 | <method name="getYear"> |
| | 146 | <parameter name="item"/> |
| | 147 | <body> |
| | 148 | <![CDATA[ |
| | 149 | |
| | 150 | var fieldID = Zotero.ItemFields.getFieldIDFromTypeAndBase(item.itemTypeID, 'date'); |
| | 151 | return item.getField(fieldID, false); |
| | 152 | ]]> |
| | 153 | </body> |
| | 154 | </method> |
| | 179 | |
| | 180 | // First pass |
| | 181 | // compare with current item, |
| | 182 | // fill first slot with |
| | 183 | // author or title that differs |
| | 184 | // in first 15 characters (if any) |
| | 185 | var relatedInfo = []; |
| | 186 | for (var i = 0; i < related.length; i++) { |
| | 187 | info = []; |
| | 188 | relatedInfo.push(info); |
| | 189 | var otherAuthor = related[i].getField('firstCreator'); |
| | 190 | if (otherAuthor && otherAuthor.slice(0, 15) !== itemAuthors.slice(0, 15)) { |
| | 191 | info.push(otherAuthor); |
| | 192 | continue; |
| | 193 | } |
| | 194 | var otherTitle = related[i].getDisplayTitle(); |
| | 195 | if (otherTitle && otherTitle.slice(0, 15) !== itemTitle.slice(0, 15)) { |
| | 196 | info.push(otherTitle); |
| | 197 | } |
| | 198 | } |
| | 199 | |
| | 200 | // Second pass: compare each element |
| | 201 | // with all partners maybe. Max two slots |
| | 202 | var all = related.concat([this.item]); |
| | 203 | var itemVolIssueJournal = this.getVolIssueJournal(this.item); |
| | 204 | var itemYear = this.getYear(this.item); |
| | 205 | for (var i = 0, ilen = related.length; i < ilen; i += 1) { |
| | 206 | var volIssueJournal = this.getVolIssueJournal(related[i]); |
| | 207 | if (relatedInfo[i].length === 0) { |
| | 208 | if (volIssueJournal) { |
| | 209 | relatedInfo[i].push(volIssueJournal); |
| | 210 | } |
| | 211 | var relatedYear = this.getYear(related[i]); |
| | 212 | if (relatedYear) { |
| | 213 | relatedInfo[i].push(relatedYear); |
| | 214 | } |
| | 215 | } else if (relatedInfo[i].length === 1) { |
| | 216 | // In this case only, we need to try, at least, to |
| | 217 | // distinguish one related item from all others. |
| | 218 | var be_pushy = true; |
| | 219 | for (var j = 0, jlen = all.length; j < jlen; j += 1) { |
| | 220 | if (i === j) { |
| | 221 | continue; |
| | 222 | } |
| | 223 | if (itemVolIssueJournal.slice(0, 15) === volIssueJournal.slice(0, 15)) { |
| | 224 | be_pushy = false; |
| | 225 | } |
| | 226 | } |
| | 227 | if (be_pushy) { |
| | 228 | relatedInfo[i].push(volIssueJournal); |
| | 229 | } else if (this.getYear(related[i])) { |
| | 230 | relatedInfo[i].push(this.getYear(related[i])); |
| | 231 | } |
| | 232 | } |
| | 233 | // (The only other possible length is 2, |
| | 234 | // in which case we were already done.) |
| | 235 | |
| | 236 | // Tidy up. |
| | 237 | if (!relatedInfo[i].length) { |
| | 238 | relatedInfo[i].push("(no data)"); |
| | 239 | } |
| | 240 | } |
| 132 | | icon.setAttribute('src','chrome://zotero/skin/treeitem-' + type + '.png'); |
| 133 | | |
| 134 | | var label = document.createElement("label"); |
| 135 | | label.setAttribute('value', related[i].getDisplayTitle()); |
| 136 | | label.setAttribute('crop','end'); |
| 137 | | label.setAttribute('flex','1'); |
| 138 | | |
| | 265 | icon.setAttribute('src','chrome://zotero/skin/treeitem-' + type + '.png'); |
| 145 | | box.appendChild(label); |
| 146 | | |
| | 272 | for (var j = 0, jlen = relatedInfo[i].length; j < jlen; j += 1) { |
| | 273 | var label = document.createElement("label"); |
| | 274 | label.setAttribute('value', relatedInfo[i][j]); |
| | 275 | label.setAttribute('crop','end'); |
| | 276 | label.setAttribute('flex', 1); |
| | 277 | if (j === 1 || relatedInfo[i].length === 1) { |
| | 278 | label.setAttribute("style", "text-align:right;"); |
| | 279 | } |
| | 280 | box.appendChild(label); |
| | 281 | } |