63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/_storage/_storage.rb', line 63
def navi(conds)
conds[:p] = '1' unless conds[:p] || conds[:id] || (@sd[:p_size].to_i < 1)
navi = {}
(([:id, :p, :d] & conds.keys) | conds.keys).each {|cid|
next unless conds[cid] && respond_to?("_sibs_#{cid}", true)
sibs = __send__("_sibs_#{cid}", conds)
c = (c.is_a?(::Array) && c.size < 2) ? conds[cid].first : conds[cid]
if i = sibs.index(c)
if !navi[:prev] && i > 0
navi[:prev] = conds.merge(cid => sibs[i - 1])
if ![:id, :p].include? cid
navi[:prev][:id] = _select_without(:id, navi[:prev]).last if conds[:id]
navi[:prev][:p] = _p_count(navi[:prev]).to_s if conds[:p]
end
end
if !navi[:next] && i < (sibs.size - 1)
navi[:next] = conds.merge(cid => sibs[i + 1])
if ![:id, :p].include? cid
navi[:next][:id] = _select_without(:id, navi[:next]).first if conds[:id]
navi[:next][:p] = '1' if conds[:p]
end
end
end
navi[:sibs] ||= {cid => sibs} if navi[:prev] || navi[:next]
break if navi[:prev] && navi[:next]
}
navi
end
|