mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v3.1.1.1
This commit is contained in:
@@ -22,7 +22,7 @@ import gplx.xowa.wikis.nss.*;
|
||||
import gplx.xowa.htmls.core.htmls.*; import gplx.xowa.htmls.hrefs.*; import gplx.xowa.htmls.core.wkrs.lnkis.htmls.*;
|
||||
import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
import gplx.xowa.apps.urls.*;
|
||||
public class Xows_page_allpages extends gplx.core.brys.Bfr_arg_base implements GfoInvkAble, Xows_page {
|
||||
public class Xows_page_allpages implements gplx.core.brys.Bfr_arg, GfoInvkAble, Xows_page {
|
||||
public Xows_page_allpages(Xowe_wiki wiki) {
|
||||
this.wiki = wiki;
|
||||
html_itm_fmtr = new Xos_pagelist_html_itm_fmtr(this, wiki);
|
||||
@@ -143,7 +143,7 @@ public class Xows_page_allpages extends gplx.core.brys.Bfr_arg_base implements G
|
||||
if (!ns.Id_is_main()) ttl_bry = Bry_.Add(ns.Name_db_w_colon(), ttl_bry);
|
||||
return Xoa_ttl.parse(wiki, ttl_bry);
|
||||
}
|
||||
@Override public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
int len = rslt_list_ttls.length;
|
||||
html_itm_fmtr.XferAry_bgn();
|
||||
for (int i = 0; i < len; i += itms_per_grp) {
|
||||
@@ -167,7 +167,7 @@ public class Xows_page_allpages extends gplx.core.brys.Bfr_arg_base implements G
|
||||
, Invk_itms_per_page_ = "itms_per_page_", Invk_itms_per_grp_ = "itms_per_grp_", Invk_show_redirects_ = "show_redirects_";
|
||||
public static final String GRP_KEY = "xowa.special.allpages";
|
||||
}
|
||||
class Xos_pagelist_html_itm_fmtr extends gplx.core.brys.Bfr_arg_base {
|
||||
class Xos_pagelist_html_itm_fmtr implements gplx.core.brys.Bfr_arg {
|
||||
public Xos_pagelist_html_itm_fmtr(Xows_page_allpages mgr, Xowe_wiki wiki) {
|
||||
this.mgr = mgr; this.wiki = wiki; this.href_wtr = wiki.Appe().Html__href_wtr(); this.wiki_key = wiki.Domain_bry();
|
||||
this.itm_normal = mgr.Html_list_itm_normal(); this.itm_redirect = mgr.Html_list_itm_redirect();
|
||||
@@ -182,7 +182,7 @@ class Xos_pagelist_html_itm_fmtr extends gplx.core.brys.Bfr_arg_base {
|
||||
init_ns = mgr.Init_ns();
|
||||
} int itms_per_grp, ttls_len, itm_pct; Xowd_page_itm[] ttls; Xow_ns init_ns;
|
||||
public void XferAry_end() {ttls = null;}
|
||||
@Override public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
int itm_end = itm_idx + itms_per_grp;
|
||||
for (int i = itm_idx; i < itm_end; i++) {
|
||||
if (i >= ttls_len) break; // handle odd number of itms; EX: interval=3; items=4; proc gets called on 0 (0-2) and 3 (3-5); ArrayIndex for 4, 5
|
||||
|
||||
@@ -71,7 +71,7 @@ public class Move_page implements Xows_page {
|
||||
fmtr_all.Bld_bfr_many(tmp_bfr
|
||||
, msg_mgr.Val_by_key_obj("move-page-legend")
|
||||
, Bry_.Add(Xoh_href_.Bry__wiki, src_ttl.Full_db())
|
||||
, gplx.langs.htmls.Html_utl.Escape_html_as_bry(src_ttl.Full_txt())
|
||||
, gplx.langs.htmls.Gfh_utl.Escape_html_as_bry(src_ttl.Full_txt())
|
||||
, src_ttl.Full_txt()
|
||||
, msg_mgr.Val_by_key_obj("newtitle")
|
||||
, ns_list_fmtr
|
||||
@@ -120,13 +120,13 @@ public class Move_page implements Xows_page {
|
||||
, "</form>"
|
||||
), "move-page-legend", "src_href", "src_title", "src_text", "newtitle", "trg_ns_list", "trg_title", "move-leave-redirect", "movepagebtn");
|
||||
}
|
||||
class Move_trg_ns_list_fmtr extends gplx.core.brys.Bfr_arg_base {
|
||||
class Move_trg_ns_list_fmtr implements gplx.core.brys.Bfr_arg {
|
||||
private Xowe_wiki wiki; private Xoa_ttl ttl;
|
||||
public void Init_by_page(Xowe_wiki wiki, Xoae_page page, Xoa_ttl ttl) {
|
||||
this.wiki = wiki;
|
||||
this.ttl = ttl;
|
||||
}
|
||||
@Override public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
Xow_ns_mgr ns_mgr = wiki.Ns_mgr();
|
||||
int ns_len = ns_mgr.Ids_len();
|
||||
for (int i = 0; i < ns_len; i++) {
|
||||
|
||||
@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.specials.search; import gplx.*; import gplx.xowa.*; import gplx.xowa.specials.*;
|
||||
import gplx.core.primitives.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
class Xog_search_suggest_cmd implements GfoInvkAble, Cancelable {
|
||||
public class Xog_search_suggest_cmd implements GfoInvkAble, Cancelable {
|
||||
private Xowe_wiki wiki; private byte[] search_bry; private Xosrh_page_mgr searcher; private int max_results, all_pages_extend, all_pages_min;
|
||||
public Xog_search_suggest_cmd(Xoae_app app, Xog_search_suggest_mgr mgr) {
|
||||
this.app = app; this.mgr = mgr;
|
||||
|
||||
@@ -40,7 +40,7 @@ class Xows_core {
|
||||
try {
|
||||
Xowe_wiki wiki = wiki_mgr.Get_by_key_or_make(domain.Domain_bry()); wiki.Init_assert();
|
||||
Assert_page_count(wiki);
|
||||
Xows_ui_cmd cmd = new Xows_ui_cmd(this, qry, wiki, page, page.Tab_data().Close_mgr(), page.Tab_data().Tab().Html_itm());
|
||||
Xows_ui_cmd cmd = new Xows_ui_cmd(this, qry, wiki, page, page.Tab_data().Close_mgr(), page.Tab_data().Tab().Html_itm(), null, null); // null b/c args are only used by drd
|
||||
qry.Cmds__add(cmd);
|
||||
} catch (Exception e) {Xoa_app_.Usr_dlg().Warn_many("", "", "search:wiki failed; wiki=~{0} err=~{1}", domain.Domain_str(), Err_.Message_lang(e));} // handle bad wikis, like "en.wikipedia.org-old"; DATE:2015-04-24
|
||||
}
|
||||
|
||||
@@ -20,8 +20,23 @@ import gplx.core.primitives.*; import gplx.dbs.*;
|
||||
import gplx.xowa.wikis.nss.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.langs.cases.*;
|
||||
import gplx.gfui.*;
|
||||
class Xows_db_wkr {
|
||||
public void Search(Xows_ui_cmd cmd, Xows_ui_qry qry, Xows_ui_rslt rslt, Xows_db_cache cache, Xow_wiki wiki) {
|
||||
public class Xows_db_wkr {
|
||||
private Xol_case_mgr drd_case_mgr;
|
||||
public Xows_db_row[] Search_by_drd(Cancelable cancelable, Xow_wiki wiki, Xows_ui_async ui_async, byte[] search, int search_results_max) {
|
||||
Xows_ns_mgr ns_mgr = new Xows_ns_mgr(); ns_mgr.Add_main_if_empty();
|
||||
Xows_ui_qry qry = new Xows_ui_qry(search, 0, search_results_max, Xosrh_rslt_itm_sorter.Tid_len_dsc, ns_mgr, Bool_.Y, new gplx.xowa.wikis.domains.Xow_domain_itm[] {wiki.Domain_itm()});
|
||||
Xows_ui_rslt rslt = new Xows_ui_rslt();
|
||||
Xows_db_cache cache = new Xows_db_cache(); cache.Init_by_db(Cancelable_.Never, search, wiki.Data__core_mgr().Db__search().Tbl__search_word());
|
||||
Xows_ui_cmd cmd = new Xows_ui_cmd(null, qry, wiki, null, null, null, cache, ui_async);
|
||||
if (drd_case_mgr == null) drd_case_mgr = Xol_case_mgr_.U8();
|
||||
Search(cancelable, cmd, qry, rslt, cache, wiki, drd_case_mgr);
|
||||
int len = cache.Count();
|
||||
Xows_db_row[] rv = new Xows_db_row[len];
|
||||
for (int i = 0; i < len; ++i)
|
||||
rv[i] = cache.Get_at(i);
|
||||
return rv;
|
||||
}
|
||||
@gplx.Internal protected void Search(Cancelable cancelable, Xows_ui_cmd cmd, Xows_ui_qry qry, Xows_ui_rslt rslt, Xows_db_cache cache, Xow_wiki wiki, Xol_case_mgr case_mgr) {
|
||||
// assert matcher
|
||||
Xowd_db_file search_db = wiki.Data__core_mgr().Db__search();
|
||||
Xoa_app_.Usr_dlg().Prog_many("", "", "search started (please wait)");
|
||||
@@ -48,13 +63,13 @@ class Xows_db_wkr {
|
||||
while (true) {
|
||||
boolean found_none = true;
|
||||
for (int i = 0; i < word_ary_len; ++i) { // loop each word to get rslts_wanted
|
||||
if (cmd.Canceled()) return;
|
||||
if (cancelable.Canceled()) return;
|
||||
Xows_db_word word = word_ary[i];
|
||||
if (word.Rslts_done()) continue; // last db_search for word returned 0 results; don't search again;
|
||||
int offset = word.Rslts_offset();
|
||||
Xoa_app_.Usr_dlg().Prog_many("", "", "searching; wiki=~{0} total=~{1} offset=~{2} index=~{3} word=~{4}", wiki.Domain_str(), word_ary_len, offset, i, word.Text());
|
||||
String sql = String_.Format(Search_sql, link_tbl.Tbl_name(), link_tbl.Fld_page_id(), link_tbl.Fld_word_id(), word.Id(), "page_len", "DESC", Int_.Max_value, offset); // need to return enough results to fill qry.Page_len() as many results may be discarded below; DATE:2015-04-24
|
||||
int rslts_found = Search_pages(cmd, qry, rslt, cache, wiki, page_tbl, attach_rdr, sql, word, matcher, rslts_wanted);
|
||||
int rslts_found = Search_pages(cancelable, cmd, qry, rslt, cache, wiki, case_mgr, page_tbl, attach_rdr, sql, word, matcher, rslts_wanted);
|
||||
total_found += rslts_found;
|
||||
if (rslts_found == -1) return; // canceled
|
||||
else if (rslts_found > 0) found_none = false; // NOTE: do not reverse and do rslts_found == 0; want to check if any word returns results;
|
||||
@@ -66,13 +81,13 @@ class Xows_db_wkr {
|
||||
cache.Sort();
|
||||
} finally {attach_rdr.Detach();}
|
||||
}
|
||||
private int Search_pages(Xows_ui_cmd cmd, Xows_ui_qry qry, Xows_ui_rslt rslt, Xows_db_cache cache, Xow_wiki wiki, Xowd_page_tbl page_tbl, Db_attach_rdr attach_rdr, String sql, Xows_db_word word, Xows_db_matcher matcher, int rslts_wanted) {
|
||||
private int Search_pages(Cancelable cancelable, Xows_ui_cmd cmd, Xows_ui_qry qry, Xows_ui_rslt rslt, Xows_db_cache cache, Xow_wiki wiki, Xol_case_mgr case_mgr, Xowd_page_tbl page_tbl, Db_attach_rdr attach_rdr, String sql, Xows_db_word word, Xows_db_matcher matcher, int rslts_wanted) {
|
||||
int rslts_found = 0;
|
||||
Xow_ns_mgr ns_mgr = wiki.Ns_mgr(); Xol_case_mgr case_mgr = wiki.Lang().Case_mgr();
|
||||
Xow_ns_mgr ns_mgr = wiki.Ns_mgr();
|
||||
Db_rdr rdr = attach_rdr.Exec_as_rdr(sql);
|
||||
try {
|
||||
while (rdr.Move_next()) {
|
||||
if (cmd.Canceled()) return -1;
|
||||
if (cancelable.Canceled()) return -1;
|
||||
word.Rslts_offset_add_1();
|
||||
int page_ns = rdr.Read_int(page_tbl.Fld_page_ns());
|
||||
if (!qry.Ns_mgr().Has(page_ns)) continue; // ignore: ns doesn't match
|
||||
|
||||
@@ -37,7 +37,7 @@ class Xows_html_wkr {
|
||||
public void Gen_tbl(Bry_bfr bfr, Xows_ui_rslt rslt, byte[] cmd_key, byte[] wiki_domain, boolean searching_db) {
|
||||
html_rows.Init(rslt);
|
||||
byte[] search_link = lnki_bldr.Href_(wiki_domain, wiki.Ttl_parse(self_lnkr.Bld_to_bry())).Caption_(wiki_domain).Img_16x16(Xoh_img_path.Img_search).Img_pos_is_left_(Bool_.Y).Bld_to_bry();
|
||||
fmtr_tbl.Bld_bfr_many(bfr, search_link, searching_db ? Cancel_link(wiki_domain, cmd_key) : Bry_.Empty, Bry_hdr_len, Bry_hdr_ttl, Xows_ui_async.Gen_insert_key(wiki_domain), html_rows);
|
||||
fmtr_tbl.Bld_bfr_many(bfr, search_link, searching_db ? Cancel_link(wiki_domain, cmd_key) : Bry_.Empty, Bry_hdr_len, Bry_hdr_ttl, Xows_ui_async__html.Gen_insert_key(wiki_domain), html_rows);
|
||||
}
|
||||
private byte[] Cancel_link(byte[] domain, byte[] cmd_key) {
|
||||
lnki_bldr.Id_(Bry_.Add(Bry_.new_a7("xowa_cancel_"), domain));
|
||||
@@ -52,14 +52,14 @@ class Xows_html_wkr {
|
||||
boolean img_pos_is_left = true;
|
||||
if (fwd) {
|
||||
++paging_idx;
|
||||
// if (paging_idx > qry.Page_max()) return Html_entity_.Nbsp_num_bry;
|
||||
// if (paging_idx > qry.Page_max()) return Gfh_entity_.Nbsp_num_bry;
|
||||
img_pos_is_left = false;
|
||||
img_path = Xoh_img_path.Img_go_fwd;
|
||||
title = Bry_paging_fwd;
|
||||
}
|
||||
else {
|
||||
--paging_idx;
|
||||
if (paging_idx < 0) return Html_entity_.Nbsp_num_bry;
|
||||
if (paging_idx < 0) return Gfh_entity_.Nbsp_num_bry;
|
||||
img_path = Xoh_img_path.Img_go_bwd;
|
||||
title = Bry_paging_bwd;
|
||||
}
|
||||
@@ -91,12 +91,12 @@ class Xows_html_wkr {
|
||||
, Bry_hdr_len = Bry_.new_a7("Page length"), Bry_hdr_ttl = Bry_.new_a7("Page title")
|
||||
;
|
||||
}
|
||||
class Xows_html_row extends gplx.core.brys.Bfr_arg_base {
|
||||
class Xows_html_row implements gplx.core.brys.Bfr_arg {
|
||||
private final Xoh_lnki_bldr lnki_bldr; private Xows_ui_rslt rslt;
|
||||
private final Object thread_lock = new Object();
|
||||
public Xows_html_row(Xoh_lnki_bldr lnki_bldr) {this.lnki_bldr = lnki_bldr;}
|
||||
public Xows_html_row Init(Xows_ui_rslt rslt) {this.rslt = rslt; return this;}
|
||||
@Override public void Bfr_arg__add(Bry_bfr bfr) { // <a href="/wiki/A" title="A" class="xowa-visited">A</a>
|
||||
public void Bfr_arg__add(Bry_bfr bfr) { // <a href="/wiki/A" title="A" class="xowa-visited">A</a>
|
||||
int len = rslt.Len();
|
||||
for (int i = 0; i < len; ++i) {
|
||||
Xows_db_row row = rslt.Get_at(i);
|
||||
@@ -109,7 +109,7 @@ class Xows_html_row extends gplx.core.brys.Bfr_arg_base {
|
||||
byte[] title = row.Page_ttl().Full_txt();
|
||||
lnki_bldr.Title_(title);
|
||||
lnki_bldr.Caption_(title);
|
||||
fmtr.Bld_bfr_many(bfr, Html_utl.Encode_id_as_str(row.Key()), row.Page_len(), lnki_bldr.Bld_to_bry());
|
||||
fmtr.Bld_bfr_many(bfr, Gfh_utl.Encode_id_as_str(row.Key()), row.Page_len(), lnki_bldr.Bld_to_bry());
|
||||
}
|
||||
}
|
||||
public Bry_fmtr Fmtr() {return fmtr;} private final Bry_fmtr fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last
|
||||
|
||||
@@ -16,55 +16,6 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.specials.search; import gplx.*; import gplx.xowa.*; import gplx.xowa.specials.*;
|
||||
import gplx.langs.htmls.*; import gplx.xowa.files.gui.*;
|
||||
class Xows_ui_async {
|
||||
private final Xows_html_row html_row; private final Xog_js_wkr js_wkr;
|
||||
private final Xows_db_row[] rows; private final int rows_len;
|
||||
private final Bry_bfr bfr = Bry_bfr.new_(255);
|
||||
private final byte[] insert_new_key;
|
||||
private final Cancelable cxl;
|
||||
public Xows_ui_async(Cancelable cxl, Xows_html_row html_row, Xog_js_wkr js_wkr, int paging_len, byte[] wiki) {
|
||||
this.cxl = cxl;
|
||||
this.html_row = html_row; this.js_wkr = js_wkr;
|
||||
this.rows = new Xows_db_row[paging_len];
|
||||
this.rows_len = paging_len;
|
||||
this.insert_new_key = Gen_insert_key(wiki);
|
||||
}
|
||||
public void Add(Xows_db_row new_row) {
|
||||
Xows_db_row last_row = rows[rows_len - 1];
|
||||
if (last_row != null) {
|
||||
if (Compare(new_row, last_row) == CompareAble_.MoreOrSame) return; // new_row is < last_row; exit
|
||||
}
|
||||
int new_row_slot = Find_insert_slot(new_row); if (new_row_slot == -1) return;
|
||||
Xows_db_row insert_row = rows[new_row_slot];
|
||||
byte[] insert_key = insert_row == null ? insert_new_key : insert_row.Key();
|
||||
Displace(new_row_slot, new_row);
|
||||
html_row.Gen_html(bfr, new_row);
|
||||
String html_tbl = bfr.To_str_and_clear();
|
||||
if (cxl.Canceled()) return;
|
||||
js_wkr.Html_elem_append_above(Html_utl.Encode_id_as_str(insert_key), html_tbl);
|
||||
if (last_row != null) {
|
||||
if (cxl.Canceled()) return;
|
||||
js_wkr.Html_elem_replace_html(Html_utl.Encode_id_as_str(last_row.Key()), "");
|
||||
}
|
||||
}
|
||||
private int Find_insert_slot(Xows_db_row new_row) {
|
||||
for (int i = 0; i < rows_len; ++i) {
|
||||
Xows_db_row cur_row = rows[i];
|
||||
if (cur_row == null) return i;
|
||||
if (Compare(new_row, cur_row) == CompareAble_.Less) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
private void Displace(int new_row_slot, Xows_db_row new_row) {
|
||||
for (int i = rows_len - 2; i >= new_row_slot; --i) {
|
||||
rows[i + 1] = rows[i];
|
||||
}
|
||||
rows[new_row_slot] = new_row;
|
||||
}
|
||||
private int Compare(Xows_db_row lhs, Xows_db_row rhs) {
|
||||
return -Int_.Compare(lhs.Page_len(), rhs.Page_len());
|
||||
}
|
||||
public static byte[] Gen_insert_key(byte[] wiki) {return Bry_.Add(Bry_insert_key, wiki);}
|
||||
private static final byte[] Bry_insert_key = Bry_.new_a7("xowa_insert_");
|
||||
public interface Xows_ui_async {
|
||||
void Add(Xows_db_row new_row);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.specials.search; import gplx.*; import gplx.xowa.*; import gplx.xowa.specials.*;
|
||||
import gplx.langs.htmls.*; import gplx.xowa.files.gui.*;
|
||||
class Xows_ui_async__html implements Xows_ui_async {
|
||||
private final Xows_html_row html_row; private final Xog_js_wkr js_wkr;
|
||||
private final Xows_db_row[] rows; private final int rows_len;
|
||||
private final Bry_bfr bfr = Bry_bfr.new_(255);
|
||||
private final byte[] insert_new_key;
|
||||
private final Cancelable cxl;
|
||||
public Xows_ui_async__html(Cancelable cxl, Xows_html_row html_row, Xog_js_wkr js_wkr, int paging_len, byte[] wiki) {
|
||||
this.cxl = cxl;
|
||||
this.html_row = html_row; this.js_wkr = js_wkr;
|
||||
this.rows = new Xows_db_row[paging_len];
|
||||
this.rows_len = paging_len;
|
||||
this.insert_new_key = Gen_insert_key(wiki);
|
||||
}
|
||||
public void Add(Xows_db_row new_row) {
|
||||
Xows_db_row last_row = rows[rows_len - 1];
|
||||
if (last_row != null) {
|
||||
if (Compare(new_row, last_row) == CompareAble_.MoreOrSame) return; // new_row is < last_row; exit
|
||||
}
|
||||
int new_row_slot = Find_insert_slot(new_row); if (new_row_slot == -1) return;
|
||||
Xows_db_row insert_row = rows[new_row_slot];
|
||||
byte[] insert_key = insert_row == null ? insert_new_key : insert_row.Key();
|
||||
Displace(new_row_slot, new_row);
|
||||
html_row.Gen_html(bfr, new_row);
|
||||
String html_tbl = bfr.To_str_and_clear();
|
||||
if (cxl.Canceled()) return;
|
||||
js_wkr.Html_elem_append_above(Gfh_utl.Encode_id_as_str(insert_key), html_tbl);
|
||||
if (last_row != null) {
|
||||
if (cxl.Canceled()) return;
|
||||
js_wkr.Html_elem_replace_html(Gfh_utl.Encode_id_as_str(last_row.Key()), "");
|
||||
}
|
||||
}
|
||||
private int Find_insert_slot(Xows_db_row new_row) {
|
||||
for (int i = 0; i < rows_len; ++i) {
|
||||
Xows_db_row cur_row = rows[i];
|
||||
if (cur_row == null) return i;
|
||||
if (Compare(new_row, cur_row) == CompareAble_.Less) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
private void Displace(int new_row_slot, Xows_db_row new_row) {
|
||||
for (int i = rows_len - 2; i >= new_row_slot; --i) {
|
||||
rows[i + 1] = rows[i];
|
||||
}
|
||||
rows[new_row_slot] = new_row;
|
||||
}
|
||||
private int Compare(Xows_db_row lhs, Xows_db_row rhs) {
|
||||
return -Int_.Compare(lhs.Page_len(), rhs.Page_len());
|
||||
}
|
||||
public static byte[] Gen_insert_key(byte[] wiki) {return Bry_.Add(Bry_insert_key, wiki);}
|
||||
private static final byte[] Bry_insert_key = Bry_.new_a7("xowa_insert_");
|
||||
}
|
||||
@@ -32,7 +32,7 @@ public class Xows_ui_async_tst {
|
||||
}
|
||||
class Xows_ui_async_fxt {
|
||||
private Xows_html_row html_row; private static final byte[] Bry_enwiki = Bry_.new_a7("w");
|
||||
private Xows_ui_async async;
|
||||
private Xows_ui_async__html async;
|
||||
private Xog_js_wkr__log js_wkr = new Xog_js_wkr__log();
|
||||
private Xowe_wiki wiki;
|
||||
public void Clear() {
|
||||
@@ -40,7 +40,7 @@ class Xows_ui_async_fxt {
|
||||
this.wiki = Xoa_app_fxt.wiki_(app, "w");
|
||||
html_row = new Xows_html_row(wiki.App().Html__lnki_bldr());
|
||||
html_row.Fmtr().Fmt_("~{page_key}");
|
||||
async = new Xows_ui_async(Cancelable_.Never, html_row, js_wkr, 5, Bry_enwiki);
|
||||
async = new Xows_ui_async__html(Cancelable_.Never, html_row, js_wkr, 5, Bry_enwiki);
|
||||
}
|
||||
public Xows_db_row Make_rslt(int len, String ttl) {
|
||||
byte[] ttl_bry = Bry_.new_a7(ttl);
|
||||
|
||||
@@ -23,11 +23,12 @@ class Xows_ui_cmd implements GfoInvkAble, Cancelable, Xog_tab_close_lnr {
|
||||
private final Xow_wiki wiki; private final Xoae_page page; private final Xog_tab_close_mgr tab_close_mgr; private final Xog_js_wkr js_wkr;
|
||||
private final boolean async; private Xows_ui_async async_wkr;
|
||||
private Xows_db_cache cache;
|
||||
public Xows_ui_cmd(Xows_core mgr, Xows_ui_qry qry, Xow_wiki wiki, Xoae_page page, Xog_tab_close_mgr tab_close_mgr, Xog_js_wkr js_wkr) {
|
||||
this.mgr = mgr; this.qry = qry; this.wiki = wiki; this.page = page; this.tab_close_mgr = tab_close_mgr; this.js_wkr = js_wkr;
|
||||
public Xows_ui_cmd(Xows_core mgr, Xows_ui_qry qry, Xow_wiki wiki, Xoae_page page, Xog_tab_close_mgr tab_close_mgr, Xog_js_wkr js_wkr, Xows_db_cache cache, Xows_ui_async async_wkr) {
|
||||
this.mgr = mgr; this.qry = qry; this.wiki = wiki; this.page = page; this.tab_close_mgr = tab_close_mgr; this.js_wkr = js_wkr; this.async_wkr = async_wkr;
|
||||
this.async = wiki.App().Mode().Tid_is_gui() && qry.Async_db();
|
||||
this.rslt = new Xows_ui_rslt();
|
||||
this.key = Html_utl.Encode_id_as_bry(Bry_.Add(qry.Key(), Byte_ascii.Pipe_bry, wiki.Domain_bry()));
|
||||
this.key = Gfh_utl.Encode_id_as_bry(Bry_.Add(qry.Key(), Byte_ascii.Pipe_bry, wiki.Domain_bry()));
|
||||
this.cache = cache;
|
||||
}
|
||||
public byte[] Key() {return key;} private final byte[] key;
|
||||
public Xow_wiki Wiki() {return wiki;}
|
||||
@@ -45,7 +46,7 @@ class Xows_ui_cmd implements GfoInvkAble, Cancelable, Xog_tab_close_lnr {
|
||||
if (!cache.Done() && (qry.Itms_end() > cache.Itms_end())) {
|
||||
if (async) {
|
||||
fill_from_cache = false; // NOTE: do not retrieve cached results to page, else ui_async cmd will add out of order; DATE:2015-04-24
|
||||
if (async_wkr == null) async_wkr = new Xows_ui_async(this, new Xows_html_row(new gplx.xowa.htmls.core.htmls.utls.Xoh_lnki_bldr(wiki.App(), wiki.App().Html__href_wtr())), js_wkr, qry.Page_len(), wiki.Domain_bry());
|
||||
if (async_wkr == null) async_wkr = new Xows_ui_async__html(this, new Xows_html_row(new gplx.xowa.htmls.core.htmls.utls.Xoh_lnki_bldr(wiki.App(), wiki.App().Html__href_wtr())), js_wkr, qry.Page_len(), wiki.Domain_bry());
|
||||
Thread_adp_.invk_(gplx.xowa.apps.Xoa_thread_.Key_special_search_db, this, Invk_search_db).Start();
|
||||
}
|
||||
else
|
||||
@@ -68,7 +69,7 @@ class Xows_ui_cmd implements GfoInvkAble, Cancelable, Xog_tab_close_lnr {
|
||||
for (int i = qry_itms_bgn; i < cache_count; ++i)
|
||||
async_wkr.Add(cache.Get_at(i));
|
||||
}
|
||||
new Xows_db_wkr().Search(this, qry, rslt, cache, wiki);
|
||||
new Xows_db_wkr().Search(this, this, qry, rslt, cache, wiki, wiki.Lang().Case_mgr());
|
||||
mgr.Search_end(this);
|
||||
if (this.Canceled()) return; // NOTE: must check else throws SWT exception
|
||||
this.Hide_cancel_btn();
|
||||
|
||||
@@ -44,9 +44,9 @@ public class Xop_statistics_page implements Xows_page {
|
||||
, "</div>"
|
||||
), "page_stats", "ns_stats");
|
||||
}
|
||||
class Xop_statistics_stats_page_grp extends gplx.core.brys.Bfr_arg_base {
|
||||
class Xop_statistics_stats_page_grp implements gplx.core.brys.Bfr_arg {
|
||||
public void Wiki_(Xowe_wiki v) {this.wiki = v;} private Xowe_wiki wiki;
|
||||
@Override public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
byte[] lbl_header_pages = wiki.Msg_mgr().Val_by_id(Xol_msg_itm_.Id_statistics_header_pages);
|
||||
byte[] lbl_articles = wiki.Msg_mgr().Val_by_id(Xol_msg_itm_.Id_statistics_articles);
|
||||
byte[] lbl_pages = wiki.Msg_mgr().Val_by_id(Xol_msg_itm_.Id_statistics_pages);
|
||||
@@ -69,10 +69,10 @@ class Xop_statistics_stats_page_grp extends gplx.core.brys.Bfr_arg_base {
|
||||
, " </tr>"
|
||||
), "lbl_header_pages", "lbl_articles", "lbl_pages", "lbl_pages_desc", "page_count_main", "page_count_all");
|
||||
}
|
||||
class Xop_statistics_stats_ns_grp extends gplx.core.brys.Bfr_arg_base {
|
||||
class Xop_statistics_stats_ns_grp implements gplx.core.brys.Bfr_arg {
|
||||
private Xop_statistics_stats_ns_itm ns_itm_fmtr = new Xop_statistics_stats_ns_itm();
|
||||
public void Wiki_(Xowe_wiki v) {this.wiki = v; ns_itm_fmtr.Wiki_(v);} private Xowe_wiki wiki;
|
||||
@Override public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
byte[] lbl_header_ns = wiki.Msg_mgr().Val_by_id(Xol_msg_itm_.Id_statistics_header_ns);
|
||||
fmtr_ns_grp.Bld_bfr_many(bfr, lbl_header_ns, ns_itm_fmtr);
|
||||
}
|
||||
@@ -83,9 +83,9 @@ class Xop_statistics_stats_ns_grp extends gplx.core.brys.Bfr_arg_base {
|
||||
, " </tr>~{ns_itms}"
|
||||
), "lbl_header_ns", "ns_itms");
|
||||
}
|
||||
class Xop_statistics_stats_ns_itm extends gplx.core.brys.Bfr_arg_base {
|
||||
class Xop_statistics_stats_ns_itm implements gplx.core.brys.Bfr_arg {
|
||||
public void Wiki_(Xowe_wiki v) {this.wiki = v;} private Xowe_wiki wiki;
|
||||
@Override public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
Xow_ns_mgr ns_mgr = wiki.Ns_mgr();
|
||||
int ns_len = ns_mgr.Count();
|
||||
for (int i = 0; i < ns_len; i++) {
|
||||
@@ -104,9 +104,9 @@ class Xop_statistics_stats_ns_itm extends gplx.core.brys.Bfr_arg_base {
|
||||
, " </tr>"
|
||||
), "ns_name", "ns_count");
|
||||
}
|
||||
class Xop_statistics_stats_wiki_grp extends gplx.core.brys.Bfr_arg_base {
|
||||
class Xop_statistics_stats_wiki_grp implements gplx.core.brys.Bfr_arg {
|
||||
public void Wiki_(Xowe_wiki v) {this.wiki = v;} private Xowe_wiki wiki;
|
||||
@Override public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
fmtr_wiki.Bld_bfr_many(bfr, wiki.Db_mgr().Tid_name(), wiki.Fsys_mgr().Root_dir().Raw(), Byte_.To_str(wiki.Db_mgr().Category_version()), wiki.Maint_mgr().Wiki_dump_date().XtoStr_fmt_iso_8561());
|
||||
}
|
||||
private Bry_fmtr fmtr_wiki = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last
|
||||
|
||||
@@ -65,7 +65,7 @@ abstract class Xosp_fbrow_cmd__base implements Xosp_fbrow_cmd {
|
||||
, " .fsys_td_size {text-align:right;}"
|
||||
, " </style>"
|
||||
, " <script type='text/javascript'>"
|
||||
, " function get_selected_chk(url_base, chk_prefix) {"
|
||||
, " function Xo__file_browser__get_selected_chk(url_base, chk_prefix) {"
|
||||
, " var list = document.getElementsByTagName('input');"
|
||||
, " var list_len = list.length;"
|
||||
, " var selected = '';"
|
||||
@@ -87,7 +87,7 @@ abstract class Xosp_fbrow_cmd__base implements Xosp_fbrow_cmd {
|
||||
, " <td>"
|
||||
, " <table width='100%'>"
|
||||
, " <tr>"
|
||||
, " <td align='left'><a href='javascript:get_selected_chk(\"/wiki/Special:XowaFileBrowser?cmd=~{cmd_src}&path=~{url_enc}&selected=\", \"chk_\");'>~{cmd_gui}</a>"
|
||||
, " <td align='left'><a href='javascript:Xo__file_browser__get_selected_chk(\"/wiki/Special:XowaFileBrowser?cmd=~{cmd_src}&path=~{url_enc}&selected=\", \"chk_\");'>~{cmd_gui}</a>"
|
||||
, " </td>"
|
||||
, " </tr>"
|
||||
, " </table>"
|
||||
@@ -96,7 +96,7 @@ abstract class Xosp_fbrow_cmd__base implements Xosp_fbrow_cmd {
|
||||
), "url_enc", "cmd_src", "cmd_gui")
|
||||
;
|
||||
}
|
||||
class Xosp_fbrow_html extends gplx.core.brys.Bfr_arg_base {
|
||||
class Xosp_fbrow_html implements gplx.core.brys.Bfr_arg {
|
||||
private final Gfo_url_encoder encoder = Gfo_url_encoder_.Href; private Xosp_fbrow_data_dir dir; private byte[] cmd_src;
|
||||
public void Write(Bry_bfr bfr, byte[] cmd_src, byte[] cmd_row, Xosp_fbrow_data_dir dir) {
|
||||
this.dir = dir; this.cmd_src = cmd_src;
|
||||
@@ -109,7 +109,7 @@ class Xosp_fbrow_html extends gplx.core.brys.Bfr_arg_base {
|
||||
, this
|
||||
);
|
||||
}
|
||||
@Override public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
int len = dir.Count();
|
||||
for (int i = 0; i < len; ++i) {
|
||||
Xosp_fbrow_data_sub itm = (Xosp_fbrow_data_sub)dir.Get_at(i);
|
||||
@@ -188,15 +188,14 @@ class Xosp_fbrow_cmd__wiki_add extends Xosp_fbrow_cmd__base {
|
||||
@Override protected Xosp_fbrow_rslt Write_html_selected(Xoa_url_arg_mgr arg_mgr, String selected, GfoInvkAble select_invkable) {
|
||||
String[] wikis = String_.Split(selected, ";");
|
||||
String path_str = arg_mgr.Read_str_or_null("path");
|
||||
Xowv_wiki wiki = (Xowv_wiki)GfoInvkAble_.InvkCmd_val(select_invkable, Xoav_wiki_mgr.Invk_import_by_fil, path_str + wikis[0]);
|
||||
Xowv_wiki wiki = (Xowv_wiki)GfoInvkAble_.InvkCmd_val(select_invkable, Xoav_wiki_mgr.Invk_import_by_fil, path_str + wikis[0]);
|
||||
Bry_bfr bfr = Bry_bfr.reset_(255);
|
||||
done_fmtr.Bld_bfr_many(bfr, wiki.Domain_str());
|
||||
done_fmtr.Bld_bfr_many(bfr, wiki.Domain_str(), wiki.Props().Main_page());
|
||||
return new Xosp_fbrow_rslt(Bry_.Empty, bfr.To_bry_and_clear());
|
||||
}
|
||||
private static final Bry_fmtr done_fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last
|
||||
( "<a href='/site/~{domain}/wiki/Earth'>~{domain} Main Page</a>"
|
||||
)
|
||||
, "domain");
|
||||
( "<a href='/site/~{domain}/wiki/~{main_page}'>~{domain} Main Page</a>"
|
||||
), "domain", "main_page");
|
||||
private static final byte[] Ext_xowa = Bry_.new_a7(".xowa");
|
||||
public static final byte[] Regy_key = Bry_.new_a7("xowa.wiki.add");
|
||||
public static final Xosp_fbrow_cmd__wiki_add Instance = new Xosp_fbrow_cmd__wiki_add();
|
||||
|
||||
@@ -27,7 +27,7 @@ public class Xosp_fbrow_special_tst {
|
||||
, " <td>"
|
||||
, " <table width='100%'>"
|
||||
, " <tr>"
|
||||
, " <td align='left'><a href='javascript:get_selected_chk(\"/wiki/Special:XowaFileBrowser?cmd=xowa.wiki.add&path=mem/root/dir/&selected=\", \"chk_\");'>import</a>"
|
||||
, " <td align='left'><a href='javascript:Xo__file_browser__get_selected_chk(\"/wiki/Special:XowaFileBrowser?cmd=xowa.wiki.add&path=mem/root/dir/&selected=\", \"chk_\");'>import</a>"
|
||||
, " </td>"
|
||||
, " </tr>"
|
||||
, " </table>"
|
||||
|
||||
@@ -29,7 +29,7 @@ public class System_data_page implements Xows_page {
|
||||
Io_url file_url = Path_from_type(wiki, type_val.Val()); if (file_url == null) return;
|
||||
Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001();
|
||||
byte[] file_txt = Io_mgr.Instance.LoadFilBry(file_url);
|
||||
file_txt = gplx.langs.htmls.Html_utl.Escape_html_as_bry(file_txt, true, false, false, false, false); // escape < or "</pre>" in messages will cause pre to break
|
||||
file_txt = gplx.langs.htmls.Gfh_utl.Escape_html_as_bry(file_txt, true, false, false, false, false); // escape < or "</pre>" in messages will cause pre to break
|
||||
fmtr_all.Bld_bfr_many(tmp_bfr, file_url.Raw(), file_txt);
|
||||
page.Data_raw_(tmp_bfr.To_bry_and_rls());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user