text:
Swashbuckler Motel
No prices found through our partners. Please contact the business directly or check some of our recommended alternatives.
How has this hotel rated in the past?
- Suites
- High-speed internet in room
- Microwave in room
- Smoking rooms available
- Beach
- Laundry facilities (self serve)
Photos of Swashbuckler Motel
Travelers also recommend:
- Beach
- Outdoor pool
- Swimming pool
- Smoking rooms available
- Free High-Speed Internet
- Non-smoking rooms
- Refrigerator in room
- Wireless internet connection in room (free)
- High-speed internet in room
- Microwave in room
- Wheelchair accessibility
- Air-Conditioning
- Free parking
- Kitchenette
- Suites
- Laundry facilities (self serve)
- Concierge desk
- Kids activities or Babysitting
TripAdvisor Reviews Swashbuckler Motel Treasure Island
Travel Blogs from Treasure Island
Tis the night before flight, only 1 creature remain stirring, while the other is with wine and close to his sight blurring. Only 4 1/2 hours away... wait, this d@m- autocorrect on this new phone keeps leading thou words astray...anyway... the creature still packs to the husband's dismay. To be connived...or ...
The Horseshoe
... by the sea and had fun people watching. I saw a couple that were playing with their cell pones and didn't look at each other, nor speak for a good half hour. Dang, wassup wit dat ??.
Soon it was time to motor back home to ol Charlie and relax a bit before it got dark. I did walk across the foot bridge on the resort and over to the little island. It is a peaceful place and I'm glad I spent a few days there. I may even come back one ...
Almost time
My step sister is getting married this Sunday in Benicia, CA so it's the perfect opportunity for me to go back to California. I was born and raised in the SF bay area and haven't been back in around 7 years. My husband has been to San Francisco briefly, so I'm excited to get to play tourist ...
Cats, Dogs, and Alligators...Oh My!
... aunt's husband joined us while we were eating and he seemed to like the fried shrimp. The dinner was a kind treat to us by my aunt while we were in town. Outside of the restaurant a few photo opportunities were available in the form of a clam backdrop and a giant sea turtle and alligator statue. We would be lame not to take our pictures.
Once we arrived back to the house Diana jumped next to Gnomer in the backseat and we enjoyed a ...
Adventures with Jay & Joyce Begin! Happy Holidays!
... a great beachfront suite..it was fun. Christmas Eve was spent at my sister Cathy's…this is the family gathering/party house as she is set to feed the hoards and has a bit of room to spread out. I have not been in Florida for Christmas in 27 years and always felt that tug every year when I knew they were all together (all 40 of them) and I wasn't there. We had a blast. There was soooo much food, a bakery of sweets, games played by ...


text:
GPS location based iPhone App
This project received 50 bids from talented freelancers with an average bid price of $881 USD.Get free quotes for a project like this
Project Budget$250 - $750 USD
Total Bids50
Project Description
Development of a Mobile app for iPhone
We are looking for an experience mobile app developer primarily with iPhone but android and windows is a bonus. A good understanding and experience with geo location functionality and knowledge of the environment particularly around testing on multiple phones prior to later submitting to the app store.
You will be working with an experienced UX Experience designer who will provide detailed wireframes, interaction diagrams, user journeys, etc and will be available for questions if required instantly.
Phase 1 (Quick Testing)
The project will be a to develop a small app primarily to test the concept
The app will require
• Page 1 Simple Sign in with a few pre-created profiles (just database field information not actual form page require to create profiles)
• Page 2 & 3 Filter setting 2 actual pages with profile fields for use in filtering who I can see and who can see
• Page 4 GPS location activation and user proximity indicated display radar type
• Page 5 Profile results list with filtering from setting
• Plus about 4 more simple pages like profile display.
• We will need to test the app on multiple user phones, are there issues around this testing.
In this first instance we would like to see example of work particularly around GPS functionality if possible and quote for initial Phase 1 Quick Testing. The quote should reflect that these pages are not complete or exhaustive and will only contain what is needed to test so no large layout build effort etc, just graphics we will create quick or have to hand and pages for structure and fields for use in testing functionality.
This project can be a project done over a few days at Christmas
Phase 2 Build App (will include)
Will be a full version 1 after successful testing which is expected and will includes full sign in, sign up, password recovery, Facebook integration, Linked in integration and more with full design and graphics provided.
Skills Required
Looking to make some money?
- Set your budget and the timeframe
- Outline your proposal
- Get paid for your work
Hire Freelancers who also bid on this project
Looking for work?
Work on projects like this and make money from home!Sign Up Now
- Forbes
- The New York Times
- Time
- Wall Street Journal
- Times Online

subset: commoncrawl


text:
As always, Starbucks delivers. We might go several months between visits to this Starbucks but they always remember our order from previous visits.
Is this restaurant good for dinner?
Is this an American restaurant?
Is this a cafe?
Is this restaurant appropriate for Kids?
Is this a fast food place?
Is this restaurant family-friendly?
Is this restaurant good for breakfast?
Is this primarily a coffee shop?
Are the prices at this restaurant mid-range / moderate?
Is this restaurant good for brunch?
Thanks for helping!Share another experience before you go.
As always, Starbucks delivers. We might go several months between visits to this Starbucks but they always remember our order from previous visits.
This is very cool to have everything under one roof. You can sleep, eat, gamble and order you favorite Starbucks drinks or food. Yes you hear me right there is a fully operational Starbucks under the casino's roof. It's sensational the staff is the best. We stayed for a week got to know the people that worked the counter as... More
The starbucks at Harrahs Casino in reno is right off the elevator!!! It opens early and is fast to serve you. Same great drinks and breakfast items. We love the convenience,and the coffee.
Ordered a bold coffee, she said they didn't have one & I was given a brewed light roast, asked her to do a pour over, the look she gave me was not nice even the gal behind me made a comment about it. I watched her put 5 heaping scoops into the cone & pour the hot water, I got... More
Three coffees different flavors but well worth the little wait in line. Just that i wish Starbucks would offered flavored creamers.
No matter where you go if you want a great coffee go to Starbucks. Having Starbucks at the hotel is very convenient but be prepared for a bit of a line in the morning.
A Starbucks is the same nationwide. Same or ices same food same great coffee but inside a casino. Cannot say anything more about the usual Starbucks
stand in line, order, pay for order, get order, walk away, sit at table or carry food somewhere else. enjoyed bagel and cream cheese and small coffee for 3.99
I had my morning coffee there. A lot of people but the service is fast. They also serving some kind of breakfast meals, and smoothies. Good spot in the lobby, always busy.
The Starbuck's is always good and even tried something new on this trip. The pink drink on the secret menu. Yummy strawberries and coconut milk!
Own or manage this property? Claim your listing for free to respond to reviews, update your profile and much more.Claim Your Listing


text:
Trudeau Manual 2 Mills
Sold By Partner
Material: Polypropylene
Color: Red
Manual 2 Mills Height: 3.2 inches (8 cm), Length: 2.5 inches (6 cm), Width: 2 inches (5 cm)
- Click here for more details
Short Description
* Color: Red
* Manual 2 Mills Height: 3.2 inches (8 cm), Length: 2.5 inches (6 cm), Width: 2 inches (5 cm)
* Lid Included: Yes
* Lid Lock: Yes
* Air Tight: Yes
* Quantity: 1 Piece (Manual 2 Mills)
Brand information
Since 1889, four successive generations have managed Trudeau Corporation, now a leader in its field. The No. 1 supplier of premium Kitchen and Table products in North America, Trudeau is acknowledged throughout the world for its high quality products, excellent import and distribution logistics, and unparalleled customer service.
In the mid-1990s, after over a century in the luxury imports business, Trudeau decided to start manufacturing its own kitchen products and innovate in the research, development, and design of new products. Today, Trudeau products are available from retailers in over 70 countries.
Care Instructions
QA / Warranty


text:
Andrew, Narda, and anyone else reading. If you're going to discuss hostas,
please, PLEASE change the subject line. I can tell you that I've just
downloaded 66 messages, and have read 6. Yes, SIX! How I happened to catch
this one is beyond me because anything about politics is promptly being
Now you guys know I'm not into censorship, or control, but honestly this has
gotten a bit ridiculous, and really has gone on long enough. I do believe in
self control and I wish you folks would exercise it. You are abusing this
forum and it needs to stop, NOW. This is a hosta forum for god's sake. Go to
egroups, start a political group and keep on keeping on! Or start an email
group distribution list. But let's get back to the intent of this forum.
Lu (Atlanta, Zone 7B)
----- Original Message -----
From: <firstname.lastname@example.com>
To: <email@example.com>
Sent: Saturday, November 25, 2000 6:09 AM
Subject: Re: Election - you should delete this, probably
> In a message dated 11/25/00 1:14:03 AM Eastern Standard Time,
> firstname.lastname@example.com writes:
> > (Still looking for info on wintering over Hostas in a greenhouse. One
> > of concern is the wide fluctuations in temperature during a 24 hour
> > Perhaps I should be pulling shade cloth up over the greenhouse to limit
> > the 40+ degree swings. Could be an interesting experiment, however, to
> > more info to the wintering over database. Just don't want it to be an
> > entry about what does NOT work). Andrew Lietzow
> >
> > Andrew, I overwintered numerous hostas in a poly house last year,
> with the doors open. No problem with fluctuations in temp. They did get
> occasional drink of water, maybe every three weeks or so. N.
To sign-off this list, send email to email@example.com with the
message text UNSUBSCRIBE HOSTA-OPEN


text:
FMI has raised nearly $800,000 for its foundation and will use the funds to continue promoting food safety, health and nutrition. "With a renewed emphasis at the FMI Foundation, we've established a pathway forward to expand on our dialog and resources for the food-retail industry and its customers," said Catherine Polley, executive director of the FMI Foundation and vice president of health and wellness at FMI.
Full Story:Supermarket News (free registration)


text:
Keeping everyone safe is one of our values and always our first concern.
Looking after everyone at Heathrow is critical to being a responsible business and to running our airport efficiently. Our aim is to ensure that nobody at the airport is affected by accident, illness or injury.
Our ambition
Ensure that nobody at the airport is affected by accident, illness or injury.
At least 10% annual reduction in employee and passenger injuries
Passenger accidents (within Heathrow's control per 1 million passengers) – 14% reduction in 2015, Colleague Lost Time Injuries (per 100,000 hours worked) – 11% increase
Reduce employee accidents through engaging them in "Heathrow Safe - It starts with all of us" annually
Reportable colleague injuries per 100,000 hours worked have increased by 14% between 2014 and 2015 from 0.07 to 0.08
Create a cross company safety footprint for Heathrow
A Safety Working Group has been established through the Heathrow Sustainability Partnership to commence data alignment and collection for a safety footprint.
2015 Performance
Further information
Towards a sustainable Heathrow; a Focus on Safety
Heathrow's Sustainable Mobility Zone in partnership with Guardian Sustainable Business
Read about our latest thinking in technology in mobility and in transportation


text: Hello Friends, I want to start a new home based business but not getting any idea on what and how to start it? I want to know from you people that how should I start my home based business? I want your suggestions and new ideas so that I can work accordingly. Thanks in advance.


text:
Results 1 to 2 of 2
- 01-16-2013, 08:14 AM Thread Author #1
- Posts
- 5 Posts
- Mentioned
- 0 Post(s)
- Tagged
- 0 Thread(s)
[APP] Simple Memory Cleaner Pro
Simple Memory Cleaner PRO boost your Android device!
Simple Memory Cleaner PRO is a powerful mobile memory boosting tool specially designed for Android devices. Free unused memory and make your device run faster with just a single tap.
Simple Memory Cleaner PRO features a beautiful and user-friendly interface and instantly boosts your device with just a single tap. Built using pure Android framework, it supports older devices running Android 2.2+ which require more free memory to run better.
Additionally, you have the options to choose which apps to close, lock from cleaning, launch or uninstall and view detailed information about apps and monitor your memory usage using the built in and configurable notification and widget.
* One tap memory boost
* Ability to clean memory used by Simple Memory Cleaner PRO after boost
* Gorgeous, user-friendly interface, built on pure Android framework for best performance
* Support for older devices running Android 2.2+
* Ad-free
* Less memory usage and better performance
* Lock apps from cleaning
* Launch, uninstall or kill app to free memory
* View detailed information about apps
* Configurable notification monitoring and alert system if memory is low
* Configurable memory monitoring widget with one tap cleaning
Free: https://play.google.com/store/apps/d...memory.cleaner
PRO: https://play.google.com/store/apps/d...ry.cleaner.pro
- Posts
- 812 Posts
- Global Posts
- 831 Global Posts
- Mentioned
- 0 Post(s)
- Tagged
- 0 Thread(s)
Re: [APP] Simple Memory Cleaner Pro
Guys don't use apps like this on anything ICS or above it messes with the way android manages mem and is counter productive.
Sent from my SAMSUNG-SGH-I727 using Tapatalk 2
Similar Threads
[APP] Simple Organizer Pro with Google SyncBy CubeReflect in forum Android AppsReplies: 0Last Post: 01-15-2013, 06:36 AM
[APP] Simple Organizer Pro with Google SyncBy CubeReflect in forum Android AppsReplies: 0Last Post: 12-21-2012, 09:38 AM
[APP] YAMC - yet another memory cleanerBy marlove in forum Android App InventorReplies: 0Last Post: 09-22-2011, 05:13 AM
Need Help Going Back to Previous App Version (ie. Launcher Pro)By thirdeye7 in forum Android AppsReplies: 2Last Post: 08-09-2010, 06:24 PM


text:
Is Flowtech incorrect or missing key business information? Update your Hotfrog listing today.
Contact details
Are these details correct?
Hotfrog NewZealand provides information regarding Flowtech in New Plymouth. Flowtech is located at 177-179 Gill Street, New Plymouth and provides Shopping Cart services. Contact them on (06) 759 2217 or by visiting them on their website http://www.flowtech.co.nz.
Is Flowtech in 177-179 Gill Street, New Plymouth your business? Claim your listing and attract more leads by adding more content, photos and other business details.
We have more Shopping Cart services in New Plymouth available on Hotfrog NewZealand. You can update your search for New Plymouth Shopping Cart by location, keyword or service options.
Small Business Hub
Sharing tips, ideas and advice to help grow your small business.
Your profile without ads
Have you considered upgrading to Hotfrog AdVantage? No competitor advertising means exclusive focus on your business. You take centre stage.
Create your free Hotfrog business profile
Follow Hotfrog on:
Share on:
Hotfrog Small Business Hub


text:
A spacious, gastro-style craft beer pub with a lounge-y feel, The Three Monkeys Bar ranges over two huge floors with two full bars, a heated year-round deck and a balcony overlooking the first floor. They have 36 great beers on draft and a unique menu of small plates with a twist—oysters, mussels, hot dogs, sliders, flatbread pizzas and more—created by the executive chef. They're always showing the big games on giant TVs. The Three Monkeys is a perfect spot for corporate events, happy hour and birthdays. They have DJs and dancing on weekends.
- Private Function Room(s)
- Restaurant
- WiFi
- Good for Groups
- Happy Hour
- Outdoor Seating
- $$
- American (New)
- Bar
- Breweries & Beer Gardens
- Lounge
- DJs


text:
Property markers or boundary monuments are metal pins placed at every corner of the property, including any angle or change of direction of the boundary line. Each pin is shown on the survey of each property. Property markers are required to verify property lines when obtaining permits for certain projects in the City of Blaine, such as fences, sheds, and additions., when construction is close to required setbacks or the line itself. Property marker location is important information to avoid legal and neighborhood disputes. Property lines or boundary lines are the defined points where one person's land ends and the neighboring land begins.
Watch Video on How to Find Your Property Markers
Step 1
To ensure you can dig for your property markers safely, call Gopher State One at 651-454-0002 to locate utility lines. They will need a 48 hour notice. This is a free service.
Step 2
Obtain a survey of your property. This can be done by visiting http://www.ci.blaine.mn.us/go/survey.
If you are unable to locate a survey online visit:
Step 3
Gather materials you will need to locate your property markers.
Step 4
Property markers are typically 14.5 feet in from the curb. Go to your front curb and measure back about 14.5 feet in the area you think your marker should be. Use a metal detector and then start digging. The marker should be about 6-10 inches below the surface. It may have a colored cap with numbers on the top.
Step 5
Use your survey to see what distance the back stake is from the front stake and use your tape measure to measure that distance, then use the metal detector and dig. Continue doing this until all stakes and found.
Step 6
Put a marker of some type on the uncovered stake. This will need to remain visible until an inspection is done. Do not remove your property stakes.
Step 7
If you are unable to find your stakes and/or need to have property markers installed, contact a licensed Professional Land Surveyor. You can look in a phone directory "Yellow Pages" for local area land surveying firms.
NOTE: An existing fence or structure cannot be used to verify property lines.


text:
Multi-purpose, clear glass bottles perfect for sand art, painting with our glass pens or simply inserting a message and sending! Comes with cork stopper. Height 12cm.
Thank you for visiting Mini Glass Craft Bottles - Box of 6 on hundredsofgiftideas.co.uk
We bring the products from many websites to one website for you to search, save and compare.


text:
In Between Chair SK1
Sami Kallio for andTradition
In Between Chair SK1
Designer: Sami Kallio
Manufactured by: &Tradition
Dimensions (in): 23 w | 21 d | 30 h | seat: 17.5 h
The interplay between positive and negative space is central to In Between, Sami Kallio's new chair for &Tradition. Its back and side panels provide a concrete shape and support, but forms are created equally by the gaps in between them
Danish Design Store is an authorized USA dealer for all andTradition products.
Established in 2010, &tradition is a Danish furniture and lighting firm inspired by traditional Nordic motifs....


text:
Browse by:
Performance for New Students
Sunday, August 24, 2014 5:30 PM - 7:30 PM
Class Event
Contact: Tamara Mulske 701.777.2644
Contact Dept: Music Department
Website: www.undpride.org
Memorial Stadium
2623 2nd Ave N
Grand Forks, ND 58202
Rehearsal and Performance for University at Memorial Stadium
Parking InformationUnless special parking arrangements have been stated above, off-campus guests for this event may use the pay-as-you-go option in the Parking Ramp (corner of 2nd Ave N and Columbia Road), the Visitor Lot (off Centennial Drive), or a Parking Meter. Parking in any other parking lot on-campus requires a parking pass which can be purchased directly through UND Parking and Transportation Services, 3925 Campus Rd Stop 9030 (8:00 a.m. – 4:30 p.m. Monday – Friday).
Other Events on This Day
- X-Treme 4-Person Scramble (8:45 AM)
- Find Your Classes (12 PM)
- Health & Wellness Open House (1 PM)
- (editor's pick)Walking Tour of the Fraternity & Sorority Community (1 PM)
- (editor's pick)Class of 2018 Photo & Pep Rally (6:30 PM)
- (editor's pick)Student Organization Fair (7:30 PM)
- Welcome Weekend Bingo (8:15 PM)
- (editor's pick)Outdoor Movie (9:30 PM)
Login or Sign-Up to leave comments.


text:
Jazzin' Up the Joint
Miami will get to experience what the New York Times refers to as the standout jazz piano trio of the last 25 years when pianist Keith Jarrett, bassist Gary Peacock, and drummer Jack DeJohnette come to town this Friday at 8 p.m. They will perform as part of the Arsht Center Knight Concert Halls Jazz Roots series, which Quincy Jones calls the most important new concert and educational jazz series in America. If you consider jazz to be more about skewed berets, smoky rooms, and finger snapping than about Kenny Gs saxophone, this concert is for you. To give you an idea of the jazz credentials of these cats: Theyve played with Miles Davis, Thelonius Monk, and John Coltrane. In other words: These daddies are the cats meow. Don your glad rags and watch the boys hit on all sixes.
Fri., Jan. 21, 8 p.m., 2011
Get the Things to Do Newsletter
Sign up for our weekly guide to events in Miami, and never be bored again. With suggestions for every day of the week, our recommendations will keep you busy on any budget.
Upcoming Events
Sponsor Content


text:
Hating America: A History
Oxford University Press, Aug 26, 2004 - History - 307 pages
In the early twenty-first century, the world has been seized by one of the most intense periods of anti-Americanism in history. Reviled as an imperialist power, an exporter of destructive capitalism, an arrogant crusader against Islam, and a rapacious over-consumer casually destroying the planet, it seems that the United States of America has rarely been less esteemed in the eyes of the world.
In such an environment, one can easily overlook the fact that people from other countries have, in fact, been hating America for centuries. Going back to the day of Thomas Jefferson and Ben Franklin, Americans have long been on the defensive.
Barry Rubin and Judith Colp Rubin here draw on sources from a wide range of countries to track the entire trajectory of anti-Americanism. Most significantly, they identify how anti-Americanism evolved over time. In the 18th century, the newfound land was considered too wild and barbaric to support human society. No one, the argument went, could actually live there. Animals brought from Europe, one French commentator claimed, shrunk in size and power. Native Americans too were "small and feeble," lacking "body hair, beard and ardor for his female." The very land itself was "permeated with moist and poisonous vapors, unable to give proper nourishment except to snakes and insects." This opinion prevailed through most of the 19th century, with Keats even invoking the lack of nightingales as symptomatic of just how unlovely and unlivable a place this America was.
As the young nation came together at the beginning of the twentieth century and could no longer be easily dismissed as a failure, its very success became cause for suspicion. The American model of populist democracy, the rise of mass culture, the spread of industrialization-all confirmed that America was now a viral threat that could destabilize the established order in Europe.
After the paroxysm of World War II, the worst fears of anti-Americanists were realized as the United States became one of the two most powerful nations in the world. Then, with the collapse of the Soviet Union, America became the sole superpower it is today, and the object of global suspicion and scorn.
With this powerful work, the Rubins trace the paradox that is America, a country that is both the most reviled and most envied land on earth. In the end, they demonstrate, anti-Americanism has often been a visceral response to the very idea-as well as both the ideals and policies--of America itself, its aggressive innovation, its self-confidence, and the challenge it poses to alternative ideologies.
What people are saying - Write a review
Hating America will certainly be hated by those the twin authors chose for their subject. If I had one regret about reading this well thought out well written book it would be the all too obvious pandering to America. After a quote from a former soviet leader or misguided Frenchman who never took the time to visit this "naturally degenerate land" you could be assured it would be followed by a quick and stinging jab of defense by the writers Rubin. However, on the whole it was a stunning read from which I learned much about own brethren from across the pond as well as our brothers further east. Would I pass it along to a friend who loves history or studying culture and anthropology, if I may be short and to the point, yes.
A Naturally Degenerate Land
The Distasteful Republic
The Fear of an American Future
6 other sections not shown
Other editions - View all
Common terms and phrases
References to this book
Anti-Americanism: Comparative perspectives
Brendon O'Connor,Martin Griffiths
Limited preview - 2007


text:
Donna Reed Net Worth: Donna Reed was an American actress and producer who had a net worth of $10 million. Donna Reed was born in Denison, Iowa in January 1921 and passed away in January 1986. Reed's career lasted over 40 years and she also appeared in more than 40 films. Her debut film roles came in the 1941 movies The Getaway, Shadow of the Thin Man, and Babes on Broadway. She starred on television in The Donna Reed Show from 1958 to 1966. Reed also starred as Miss Ellie Ewing in the TV series Dallas from 1984 to 1985. She starred as Mary Hatch in the 1946 film It's a Wonderful Life and won an Academy Award for Best Supporting Actress as Lorene Burke in the 1953 film From here to Eternity. Reed won a Golden Globe Award for Best TV Star in 1963. She took over for Barbara Bel Geddes playing Miss Ellie Ewing on Dallas and then sued the production company after she was fired when Geddes decided to return to the program. She settled out of court and received over $1 million. Reed received a star on the Hollywood Walk of Fame in 1960 at 1612 Vine Street. Donna Reed passed away on January 14, 1986 at 64 years old from pancreatic cancer.
Donna Reed Net Worth
Donna Reed
Date of Birth
Jan 27, 1921 - Jan 14, 1986 (64 years old)
United States of America
5 ft 6 in (1.7 m)
More Actors
All net worths are calculated by applying a proprietary algorithm. The results are then fact checked and confirmed by a team of editors. We scan all publicly available data and resources and work diligently to ensure that our numbers are the most accurate and up to date net worth data you will find anywhere on the internet.


text:
Several species of penguins, whales, seals and seabirds await you as we go ashore on the Antarctic Peninsula. This cruise offers an extraordinary experience to one of the world's more pristine locations—Antarctica!
|Jan 9, 2018 - Jan 19, 2018
|Feb 7, 2018 - Feb 17, 2018
PLEASE NOTE: The itinerary shown below is for the 10-night departures. Some departure dates are for the 9-night tours, which spend one less day in Antarctica.
Day 1: Ushuaia
In the afternoon, we embark in Ushuaia, Tierra del Fuego, Argentina, the southernmost city in the world located at the Beagle Channel and sail through this scenic waterway for the rest of the evening.
Days 2 and 3: At sea
During these two days we sail across the Drake Passage. When we cross the Antarctic Convergence, we arrive in the circum-Antarctic up welling zone. In this area we may see Wandering albatrosses, Grey-hHeaded albatrosses, Black-browed albatrosses, Light-mantled Sooty albatrosses, Cape petrels, Southern Fulmars, Wilson's Storm petrels, Blue petrels and Antarctic petrels. Near the South Shetland Islands, we spot our first icebergs.
Days 4 – 8: Antarctica
We will sail directly to "High Antarctica", passing the Melchior Islands and the Schollaert Channel between Brabant and Anvers Island. On Cuverville Island, a small precipitous island, nestled between the mountains of the Antarctic Peninsula and Ronge Island, we will find a large colony of Gentoo penguins and breeding pairs of Brown skuas. If we land on Orne Island we can observe Chinstrap penguins and possibly Weddell and Crabeater seals. In Neko Harbour we will have the opportunity to set foot on the Antarctic Continent in a magnificent landscape of huge glacier and enjoy the landscape during zodiac cruises.
When sailing to Paradise Bay, with its myriad icebergs and deep cut fjords, we will have the opportunity for zodiac cruising between the icebergs in the inner parts of the bay. In this area we have good chances to see Humpback whales and Minke whales.
Sailing north through Neumayer Channel, we hope to visit the former British research station and post office, now living museum, Port Lockroy on Goudier Island. Close to Port Lockroy we may also offer a landing on Jougla Point with Gentoo Penguins and Blue-eyed Shags.
We sail through the spectacular Lemaire Channel to Pléneau Island and Petermann Island where we can find Adelie penguins and Blue-eyed shags. In this area, there are good chances to encounter Humpback whales, Minke whales and Fin whales. Further south we may visit the Ukrainian Vernadsky Station, where we will receive a warm welcome from the station crew. Sailing north through Gerlache Strait we arrive at the Melchior Islands with a very beautiful landscape with icebergs, where we may encounter Leopard seals, Crabeater seals and whales.
Days 9 and 10: At sea
On our way north we are again followed by a great selection of seabirds while crossing the Drake Passage.
Day 11: Ushuaia
We arrive in the morning in Ushuaia and disembark.
$465 per person
$180 per person
PLEASE NOTE: Due to the nature of expedition cruising, itineraries are subject to change due to weather, ice conditions, natural and cultural events, wildlife viewing opportunities and other logistical considerations. In general, a ship's crew will endeavor to complete the itinerary provided, but the ultimate decision lies with the ship's captain and expedition leaders.


text:
Growing your skills.
2017 World Medical Marijuana Business Conference & Expo! Apr 21st-22nd PGH PA
There will be some Hydroponics and a couple master gardeners there also. Medical Marijuana has been Legalized in PA. The Law is called Act 16. It's going to take about... Learn more
- David L. Lawrence Convention Center
- 1000 Fort Duquesne Boulevard, Pittsburgh, PA (map)
Recent Meetups
Nov 5, 2016 · 12:00 PMPittsburgh Vegan Festival! GREAT FOOD! & Entertainment!
Pittsburgh Vegan Festival, GREAT FOOD and ENTERTAINMENT!FALL Edition 2016Saturday, Nov. 5, 2016 12-7 p.m.Unitarian Universalist Church of the North Hills2359 W Ingomar... Learn more
Sep 21, 2016 · 6:00 PMSteel City Soils Compost Cooperative: Crowdfunder Launch Party
Please Join Us! Wednesday Sept 21st. We will launch our crowdfunding campaign to raise money for equipment at our site in Braddock PA. Steel City Soils is a... Learn more
Jul 24, 2016 · 10:00 AMFree Class: Garden Soil Biology
Please join us for a free class! Jeff from Steel City Soils will give a primer on garden soil and the biology that lives underground. We'll talk breifly about how you... Learn more
Nov 15, 2015 · 11:00 AMAutumn In A Crock- the fun of fermentation!
Have fun making sauerkraut...Sunday, November 15 from 11-1 at the Millvale Commmunity Center Course includes all utensils and cabbage to make 5 pounds of sauerkraut.... Learn more
Nov 1, 2015 · 10:00 AMFree Class At the Market: Household Worm Keeping
Do you have an unused worm bin laying around? Bring it to the market, and we can get it to someone who will use it to start their worm adventures. Worms eat Pat's... Learn more
- See all past Meetups


text:
When it comes to decorating a abode there are a lot of altered options you can accept from in adjustment to get the appearance and feel that you are searching for in any accurate room. For instance, you can add adorning touches to a active allowance by accumulation bandy pillows, blankets, breadth rugs and account frames in your over all autogenous design. The aforementioned can be said for the bedchamber and added areas in the house. Generally times you do not accept to do a above advance or accomplish a above change to the allowance in adjustment to get a altered look. Simple changes to the accessories in a allowance can go a continued way with decorating.
One way to add a adorning blow to any allowance in the abode is by afterlight the home hardware. This amend can cover aperture handles, lighting fixtures, hinges and abounding added accessories. While these data may assume unimportant in the admirable arrangement of a house, these are the data that in fact tend to amount most. Generally times the baby data are the elements in a allowance that absolutely cull the architecture calm and accomplish aggregate attending complete. You can acquirement the absolute furniture, ball centermost and end tables for a active room, but it will not attending complete until you accept all the baby data boxlike away.
There is no appropriate or amiss way to accept a specific blazon of aperture accouterments to install in any room. There are abounding altered styles to accept from and generally times it depends on your claimed preference. The aboriginal footfall to allotment the appropriate accouterments for you is to accept what blazon of accomplishment you would like to have. Finishes about cover oil rubbed brownish and aphotic oil rubbed bronze, matte black, glassy nickel, able audacious and able chrome. It is important that already you are set on a accurate accomplishment that all the accessories in a accurate allowance bout the finish. For instance, if you accept glassy nickel for your kitchen chiffonier handles, accomplish abiding that the bore faucet and lighting accessories are glassy nickel as well.
Now that you accept accept what blazon of accomplishment you would like to emphasis a accurate allowance with, the next footfall is to accept a specific blazon of hardware. Aperture accouterments comes in abounding altered types such as aperture levers, handles and knobs. There is no appropriate or amiss accommodation if it comes to allotment amid a lever, a handle or a knob. Already you accept amid a knob, handle or lever, it is important to acquisition a barricade that matches if you accept to use one. Sometimes the accouterments already has the lock self-contained, about that is not consistently the case, accordingly it is important to accept a barricade that matches.
Door accouterments and hinges appear in all altered shapes, sizes and detail. It is important to accept a appearance that flows with the blow of the decorations in the abode and fits your personality. The accouterments can accept as little detail or as abundant detail as you want.


text:
New wetlands park made possible by environmental justice lawsuit
A densely packed, distressed neighborhood in South Los Angeles has a new, nine-acre park that will include a 4.5-acre wetland, filtering stormwater while bringing much-needed green space into a community historically plagued by nearby industrial facilities. Even better, the park replaces a former brownfield, a paved bus and rail storage yard long maintained by the Metropolitan Transit agency. The park will include native trees and plant gardens, walking trails and ponds. The grand opening was held earlier this month.
The $26 million project was funded in part through a 2004 settlement agreement reached in a lawsuit brought by the US Department of Justice (where yours truly worked back in the day), the state of California, and the Santa Monica Baykeeper against the city of Los Angeles under the federal Clean Water Act to force cleanup of the city's sewer system. A number of local citizens and civil rights groups joined the suit in support of the claim. Under the settlement, the city did not admit legal liability but agreed to a $2 billion program "to reduce Sanitary Sewer Overflows to the maximum extent feasible, and to investigate, resolve, and mitigate sewer odors."
Funding was also provided under multiple federal and local programs, including a local bond measure passed in 2004 to support water quality improvement projects. This is how the city's application described its proposal:
"The Wetland Park is proposed to include stormwater pre-treatment best management practices (BMP) measures, a stormwater treatment wetland of approximately 4.0 to 4.5 acres, renovation of an 81,760 square foot on-site structure, open park space, and a parking lot with a vegetated swale to direct runoff into the wetland. The Wetland Park will provide educational opportunities and wildlife viewing, historical railway elements, a community multi-use center, and historical building reutilization . . .
"The Wetland Park will assist in minimizing the introduction of pollutants including; bacteria, oil & grease and gasoline, suspended sediments, and heavy metals, all of which are components of urban runoff that ultimately are washed into receiving waters . . . Park amenities include trails, boardwalks, observation decks, picnic areas, a natural rock-garden seating area, educational signage, and renovation of an 81,760 square-foot on-site building for mixed public use."
You can see the building, a former garage, in the images accompanying this post. It will eventually become an education center and rail museum.
Writing for KCET-TV, Ed Fuentes hailed the green infrastructure benefits of the project, citing statements by city officials and some very important stakeholders:
"Other experts who may have insight on the perceived success of the park were the children who attended the ribbon cutting. When a group from 49th Street Elementary School were asked if they would miss a soccer field, they all agreed that this park is just as important. 'Birds need a place to play, too' said one fourth-grader."
On the Outside website, Mary Catherine O'Connor observes that, although the new park needs time to mature, another fully functioning artificial wetland - built a mile away in 2006 - suggests that birds, turtles, "and even an egret" may soon be among the new site's inhabitants. O'Connor also notes that the new park is part of a larger effort to clean up the Los Angeles River Watershed, itself part of a seven-city federal pilot program that includes watershed restoration projects on the Anacostia River in DC and Maryland, the Bronx and Harlem rivers, Denver's South Platte River and Lake Pontchartrain in New Orleans.
At full capacity, the South Los Angeles Wetlands Park will be able to process up to 680,000 gallons of stormwater each day.
The Santa Monica Baykeeper is a frequent partner and client in NRDC's efforts to bring the benefits of a clean watershed to all LA residents. The environmental justice group The City Project summed up what the new park represents:
"This work in and out of court is a best practice example of community groups, civil rights attorneys, government agencies at the federal, state and local level, and mainstream environmentalists working together to improve quality of life, human health, and environmental quality and justice for all."
To this writer, it appears to be exactly that.
Kaid Benfield writes (almost) daily about community, development, and the environment. For more posts, see his blog's home page. Please also visit NRDC's Sustainable Communities Video Channel.
Authored by:
Kaid Benfield
Senior counsel for environmental strategies, PlaceMakers LLC; senior adviser, Natural Resources Defense Council; co-founder, LEED for Neighborhood Development rating system; co-founder, Smart Growth America coalition; author, People Habitat: 25 Ways to Think About Greener, Healthier Cities (2014); one of the "top urban thinkers" on Planetizen.com and named one of "the most influential people ...


text:
Uploaded by Clevver News, Posted on 12 Jan 2017, 28 times, 14:00
Jimmy Kimmel Brings Mean Tweets To The Oscars With Ryan Gosling & Emma Stone
Moonlight's Mahershala Ali Wins Best Supporting Actor & Makes HISTORY At 2017 Os
Viola Davis Wins Best Supporting Actress & Gives AMAZING Speech At 2017 Oscars
Moana Star Auli'i Cravalho Gets Hit In The Head During 2017 Oscars Performance "
NEW Kim Kardashian PORN Leaks? Cash Me Outside Girl Feuding With Kylie Jenner?
Justin Bieber RESPONDS to Pee Stain, Gigi Hadid Stumbles on Moschino Runway!
Beyonce Fans DEMAND Coachella Refunds & Freak Out Over Snapchat Account
Dove Cameron Channels Marilyn Monroe In SEXIEST Photo Shoot Yet For Galore Mag
Damon & Elena Finally REUNITE In New Vampire Diaries Series Finale Teaser
Gigi Hadid STUMBLES On Runway At Milan Fashion Week But Recovers Like A Pro
Pretty Little Liars Emison Spin-Off In The Works?
Fifth Harmony Members Rumored For Dancing With The Stars Season 24 Cast & MORE C


text:
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9b4pre) Gecko/2008022612 Minefield/3.0b4pre
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9b4pre) Gecko/2008022612 Minefield/3.0b4pre
I am very anal, and like to keep my bookmarks in folders, with custom titles as well as tagging them.
Currently if I make a custom title in places for a bookmark, it saves. However the tag does not retain this custom title. So it means I have to rename the bookmark in two different places.
I would like the names to be consistent, so if I name in places, it keeps the same title for tags.
Reproducible: Always
Steps to Reproduce:
1.Open places
2.Rename a bookmark and tag
Actual Results:
Title is changed for bookmark, but not on the tagged bookmark.
Expected Results:
Renaming a normal bookmark, should also rename the tag.
Can confirm this, doesn't even work when restarting Firefox...
By "tagged bookmarks" I assume you mean tags that show up in queries under the default Smart bookmarks folder?
Yep, that is what I mean. Also they do not rename in places library under the tags section. Thanks for confirming.
Mano, is this because of the way we use tagcontainers? I think we should always be referencing through the URI item to get the place title.
tag containers are actually folders, so the bookmark is duplicated into it and is a different one from the original. tags should be mantained in a separate table with a cross reference one. but since we are late in the dev cycle we could mantain titles in sync, i suggest changing nsNavBookmarks::SetItemTitle so that it will not only update a single bookmark based on the id, but it will update all bookmarks which point to the same place_id.
I dont' think that a user could want to rename differently the same bookmark having it into different places (like toolbar and menu). If we allow them to have different titles for toolbar and menu we cannot choose what title to use into tags, so sync appear the only possible way.
if that's what is wanted i can fix this.
Created attachment 305987 [details] [diff] [review]
this implements comment #4 behaviour
No, this isn't something we could do at this point. There were reasons we chose to revert the url-centric model from Places.
the only usecase i see is if a user wants to have bookmarks without title on the toolbar and with title in other places. in that case we cannot sync. Still in that case how can we choose what title we should show in tags?
Then you didn't follow old places bugs... there were *a lot* of issues with the one-title-concept, esp. for import from Fx2. See also http://wiki.mozilla.org/Places:BookmarksComments
Anyway, this is a no-go at this point.
you're right, we should update only the tag for the bookmark that has generated it, but since tag creation is url-centric (we don't have a reference to the bookmark that has created the tag, instead the tag is directly linked to all bookmarks with the same url, and that is mainly because a tag is a folder now) we cannot do that (the minimum thing would be update only tag title with the latest changed bookmark title if that's not empty, but that appear as a bad workaround rather than a solution).
But, tagged items has a null title, _not_ a static title (though you could get into that state).
We should change the code which selects the history title for this case, to select the title for the most recent bookmark (which has non-null title).
Created attachment 307212 [details] [diff] [review]
this appear to be enough for the Library to show the correct title. Clearly this works until tags bookmarks have null titles, detecting real tags children could be slow (will require at least an addition join on moz_bookmarks)
why was this marked as a dataloss? it's a select problem, the bookmark retain its title and we are not loosing anything. I'm removing that, restore it if i'm wrong please.
There is a relation to bug 420003. Please fix in the very same way statement mDBBookmarkToUrlResult in nsNavHistory.cpp. Perhaps with some shared SQL fragment (view would be even better).
This statement is used when an item is added to the tag container. This happens when sorting items or when a new link is added to the tag container. In both cases the links have null titles after operation and this is shown of front-end.
thank you ondrej, will check your comments there
I'm afraid that the penalty would be too big.
I did some performance measurement and it takes 128% of the original time to select a single item. Unfortunately regardless whether the item read was in tag container or in bookmark folder. Reading a folder with 4 links inside takes 198% of the original time.
We should probably use this only when we know we are in the tag container.
most probably that's because we don't have an index on lastModified?
i can confirm most of the time is spent ordering by lastModified
if you try with this index the problems is gone (you loose about 40ms, or less), now we should try to get a similar result without having to create a new index
CREATE INDEX moz_bookmarks_fklmindex ON moz_bookmarks(fk, lastModified);
actually this is the best i have found:
SELECT h.id, h.url, COALESCE(b.title,
SELECT title
FROM moz_bookmarks
WHERE fk = h.id
AND lastModified =
(SELECT MAX(lastModified) FROM moz_bookmarks
WHERE title NOT NULL AND fk = h.id)
h.title), h.rev_host, h.visit_count,
, f.url, null, b.id,
b.dateAdded, b.lastModified,
b.position, b.type, b.fk
FROM moz_bookmarks b
LEFT JOIN moz_places h ON b.fk = h.id
LEFT OUTER JOIN moz_favicons f ON h.favicon_id = f.id
ORDER BY b.position
(notice this is not the real query, is lacking max visit date and a where clause, it's only for perf testing on a big bookmarks db)
Original query is taking 220ms, this is taking 350ms, Ondrej got similar results from testing (in percentage). The other query (order by one) was taking HUGE timings worts than these (4900ms on mine).
with the index the ORDER BY query is almost fast like the actual query (but we will have a new index, and it's always better having less than more)
So we have 3 options actually:
1. get my latest query, that is (from Ondrej calculation) about 55% slower than actual
2. create a new index, will loose a 5-10% on perf, and we will have another index (imho good only if we are going use that elsewhere)
3. on update of a bookmark title we update title for all tags referring to the same url (tags have no more null titles, we dont' touch other bookmark's titles)
Created attachment 307233 [details] [diff] [review]
impl. 1
for testing, this implements point 1
- point 1 will slowdown (by some ms) all bookmark view queries, if we cannot title bookmarks into tags and we don't really need a new index, than is the way to go.
- point 2 will increase db size and *could* affect performance globally (a new index has to be maintained by the db and make it grow in size). if we will do many selects based on lastModified to support DB sync, then this is the way to go.
- point 3 is only applicable if we don't need having null titles on bookmarks in tags, but most likely will not have any perf impact. If we can set titles and don't need a new index to speed up syncing based on lastModified, then this is the way to go.
Dietrich, Mano?
(In reply to comment #21)
> - point 3 is only applicable if we don't need having null titles on bookmarks
> in tags, but most likely will not have any perf impact. If we can set titles
> and don't need a new index to speed up syncing based on lastModified, then this
> is the way to go.
I'm afraid that there will be some performance penalty too. Every call to setItemTitle will additionally need to get list of all tags and update their titles including calling of observers. With bug 392193 import should no more call setItemTitle, so this will only be problem for manually inserted items, may be for livemark items and may be for pages changing their title using JavaScript (I'm really not sure here).
But I think that this is the best choice anyway.
ok after some testing (thanks to ondrej and dietrich for support) here is the final situation:
1. not applicable, if you have a LOT of bookmarks pointing to the same website, this is going to kill perf. tested with hugebookmarks file, lost 46s on a full db query!
3. this appear complex, but the main problem is that setting a title on tags will actually cause a big increase in db size. db size is mostly due to strings, rather than to ints. So duplicating title into tag if you end up having a lot of tagged items will cause a bad increase in db size (and that will again affect performance badly, and complain from the users in extreme cases)
the only remaining option is 2. I'm going modifying the query and creating a new index, that will also be useful when we will sync. Tested with 10500 bookmarks, a hundred tags (increasing them does not appear making things much worse), 4000 bookmarks pointing to the same uri, timings are good (lost 70ms on a full db query).
after applying the new index patch with my biggish bookmark set i see more lag in the UI, especially in bookmarks menu and in the Library.
We can't make those perf worst to fix a less important problem.
So i'll try to see if i can come with a frontend only patch for tag containers.
This problem is a pain, and is mostly due to current tag implementation as folders (that causes duplication of data).
Created attachment 307705 [details] [diff] [review]
This should be better, no the cleanest solution but i can't think anything better.
My perf problems are mostly due to the size of bookmarks (with 2400 bookmarks in the menu i cannot even scroll the right pane of the Library when the menu folder is selected:( and that is with current nightly.), i'm selecting the query on the fly based on the result type, if it's RESULTS_AS_TAG_QUERY we use the new query.
mDBBookmarkToUrlResult is fairly less used, so there the different query should not create any embarassing situation.
Comment on attachment 307705 [details] [diff] [review]
Is the same code used when viewing tag containers from places library? In this case you should probably check whether grand parent is not tags folder.
but if we add other checks we will loose the advantage of changing the query dinamically with one check on something that we already know. Then we could directly use the new query always since it would most probably have similar slowdowns. Yes we could have a minimal slowdown on tag containers (real minimal since they are not duped).
Created attachment 308839 [details] [diff] [review]
patch v2
ok, previous approach could not work because in the right pane of the Library we don't have a RESULTS_AS_TAG_QUERY parent, so we need a way to "decorate" this tagged uris.
So let's move to another solution, add a new RESULTS_AS_TAGGED_URI to results deriving from a RESULTS_AS_TAG_QUERY type, tag folders become queries (no more folder shortcuts) and are served by the query builder, so we use a different query for them that will catch the correct title. Then we have to replace the Tags query in the left pane of the Library to use RESULTS_AS_TAG_QUERY, to do this i need to include the stringBundle from the toolkit, because we have passed string freeze and we don't have a correct string fot Tags Folder in the frontend.
This patch does everything BUT replacing old library left pane query, so to test you will need a new profile. Still have to see if we should recreate the full left pane queries or only replace the old query with the new one on idle.
Ondrej could you take a look at this, since it involves changes to your code
We will have a problem when tagging a link while there is an observer on the tag containers - they force refresh. I have added 14 tags on one link (sic) and had to kill Firefox after 20 minutes. The statements with title selection seemed extremely slow with my 6000 bookmarks. I will finish the review tomorrow.
But my feeling is that this should not be a blocker.
will try your STR, i'm testing with more than 10 000 bookmarks, should see that
getItemTitle(PlacesUtils. tagsFolderId) works too.
why did you set exapndQueries on the left pane?
<Mano> here's what we should do then (going to paste that on the bug):
<Mano> 1. Make Tags a query
<Mano> 2. unset exapndQueries
<Mano> 3. make node's hasChildren honor excludeItem for uri queries - return false if it's set.
<Mano> 4. Make HasChildren honor Tag queries - return false if there are no tag folders
Mano, i've implemented comment 32 and is working, still i have to check where is the perf problem about comment 29, i can reproduce that slowdown
Created attachment 310007 [details] [diff] [review]
patch v3
the slowdown is caused by a Refresh() loop not by a query slowlyness, when i add a new tag or i remove a tag i get a bunch of calls to nsNavHistoryQueryResultNode:Refresh() that are slowing down the full thing in a bad way.
Also in the library right pane when i double click a tag the place: address has been rewritten so we don't find to the correct tag container in the left pane
need help debugging this
Created attachment 310894 [details] [diff] [review]
patch v4
this should solve the perf problem, having bookmark queries child of a bookmark query was calling refresh in loop... i've added a fake batching to avoid recursive call and that worked...
This also includes an experiment, since we should drop all bookmarks (there are other bugs that have done changes to all bookmarks, making it read only, so it could be a good moment to drop it and recreate) we could replace actual history query with a RESULTS_AS_DATE_QUERY, since large treeviews are not usable now (they are too slow) and history will be huge, we could split it with this query (query then should be changed to use more good values than 6 days ago).
Testable with a new profile.
Created attachment 310897 [details]
screenshot: actual view with splitted history and tags
Comment on attachment 310894 [details] [diff] [review]
patch v4
Nice, I would like to see two more functions CanAlwaysExpand() and ResultTypeIsURI(). The batch code in Refresh() should be explained - why we have it there.
Hi, if this patch makes it in will it allow json to keep the custom names? Currently when I restore from a json backup, it does not retain the names or does this require a seperate bug?
Karl. this is only to show changed bookmarks names in tag containers, nothing more than that, will not affect import/export in any way
Marco. Thanks, nice to see this bug is looking like getting fixed. I will make a separate bug for json problem.
Created attachment 311601 [details] [diff] [review]
patch v5
this is another approach... previous was good but not completely solving the problem.
We should return the real bookmarks in a tag container, not our "shortcut" to the bookmark... this way the title is correct and the user can edit the tag child and see changes on the real bookmark...
So when viewing a tag child you are viewing the lastModified bookmark for that uri.
This patch does that, plus fixes container icons to use tag icons (we should add a history container icon).
Ondrej please, take a look at my approach and if you have some time give it some test about those perf problems you were seeing.
Comment on attachment 311601 [details] [diff] [review]
patch v5
It behaves somehow nonstandard, so I believe it is not because I have broken build:
1) Recent Tags has tag icon, it should stay with query icon.
2a) Recent Tags in places library should not be expandable (or at least it was not before).
2b) When clicking on a tag container in the library, it behaved as a shortcut to the "Tags" folder.
3) Ordering does not seem to work for items in "Recent Tags", the Added and Last Modified columns are empty. Tagging an item by the least recently used tag does not push it to the top.
4) It is no more possible to sort content of tag container.
5) Change of item title seems to be visible in Recent Tags folder, but not in Tags folder. I even do not have the same content for some tags.
(In reply to comment #42)
> 1) Recent Tags has tag icon, it should stay with query icon.
why can't we decorate a tag query with a tag icon? Hwv not a big deal, it's an easy change.
> 2a) Recent Tags in places library should not be expandable (or at least it was
> not before).
this is going to be expandable if we are making query-containing-queries always expand and is what we are doing from the first. But clearly it should not show bookmarks inside.
> 2b) When clicking on a tag container in the library, it behaved as a shortcut
> to the "Tags" folder.
can you explain better? when double clicking on a tag container the respective tag folder is opened under Tags... it works in the same way in current trunk (apart that recent tags is not expandable), the search in the tree takes the first item with the same uri.
> 3) Ordering does not seem to work for items in "Recent Tags", the Added and
> Last Modified columns are empty. Tagging an item by the least recently used tag does not push it to the top.
i've not changed the queyr. so i should check why we are loosing them for tag containers, they were folder shortcuts, while now are queries so i suppose is due to this
> 4) It is no more possible to sort content of tag container.
We can't retain all functionality moving from a folder to a query container. That's a query we should sort contents based on some specified criteria, like by lastModified or by title, letting the user sort a tag container by title does not make much sense, let's sort it by default then.
> 5) Change of item title seems to be visible in Recent Tags folder, but not in
> Tags folder. I even do not have the same content for some tags.
i see in both places, and i see same content, is that with a new profile? do you have STR please?
Created attachment 311760 [details] [diff] [review]
So, thank you Ondrej for following me here, your testing is really appreciated!
This version should bring some major improvement over the previous, i've removed history splitting, should be done in another bug.
I've fixed many of the problems you reported, still you can't sort content of tag containers (selecting sort by name from the context menu), imo this is a wontfix, they are sorted by title by default.
Plan is to do this for new profiles only, History splitting for new profiles in another bug. Then a new bug should provide versioning for the left pane, so we can upgrade old profiles easily.
some annotations from Ondrej's testing (Thank you, again):
- the expand/compact glyph sometimes is not drawn near Tags container in the Library. Don't know much about this, could be a problem in my code for hasChildren.
- deleting a bookmark inside a tag deletes the bookmark, should be catched somewhere, probably the user is expecting that removing a bookmark under a tag will only remove the tag, not the bookmark itself.
- need to check if we can have null titled bookmarks that are not tag children, since those would be filtered out. I'd expect having empty string titled bookmarks, not null titles, checking grandparent would be better but *could* be slow (need to measure)
- need to check if we can end up with null lastModified. It should always be at least = dateAdded, are we allowing this?
- Tags icon in the Library is a query icon now, should that be a normal folder icon? Do we need a new icon for it? The same icon will be used in all saved searches with the same result type (TAG_QUERY). Need UX team ideas on this
Comment on attachment 311760 [details] [diff] [review]
The last patch was much better, however it should be noted, that with this patch following changes:
- It is no more possible to change order of tags in the Library->Tags
- It is no more possible to change order inside of individual tags.
This is a side effect and should be discussed (it will make the bug 424648 invalid), I do not know if it is on some test plan, but people tend to sort the tag containers. May be they valuate this more than titles sync.
(In reply to comment #46)
> - It is no more possible to change order of tags in the Library->Tags
> - It is no more possible to change order inside of individual tags.
true, still you can sort them using library columns. i'm not sure that ordering tags or tag contents "by hand" has a big advantage, in fact we have a bug asking to have them sorted by name rather than by position.
Instead this adds some interesting possibility:
- titles are always correct
- you can directly edit bookmarks properties inside a tag container
- bookmarks in tag containers have valid properties from the original bookmark (lastModified for example) so sorting works better and as expected
- you can directly copy or drag a bookmark from a tag container to the toolbar or menu for example and see it moving really, while now you are dragging an empty titled shortcut
- you can no more tag an history item or create a folder/separator inside a tag container (these are other 2 bugs filled that should be fixed)
- will allow us to change tag backed easily in future (for example moving them to a separate table)
Created attachment 312306 [details] [diff] [review]
patch v7
after chat with Mano and Dietrich we think that we can go on, loosing sorting is not so blocking until we can sort in the library (we could provide a way to create a most used tag smart bookmark)
> - the expand/compact glyph sometimes is not drawn near Tags container in the
> Library. Don't know much about this, could be a problem in my code for
> hasChildren.
Should work better, i had to check mValidContent
> - deleting a bookmark inside a tag deletes the bookmark, should be catched
> somewhere, probably the user is expecting that removing a bookmark under a tag
> will only remove the tag, not the bookmark itself.
fixed using transaction manager, so should work in a realiable manner
> - need to check if we can have null titled bookmarks that are not tag children
fixed the query, so now i'm filtering based on grandparent
> - need to check if we can end up with null lastModified. It should always be at
> least = dateAdded, are we allowing this?
fixed for newly created items, old items will be fixed on idle so we can't have items with a NULL lastModified (should be at least = dateAdded)
> - Tags icon in the Library is a query icon now, should that be a normal folder
> icon? Do we need a new icon for it? The same icon will be used in all saved
> searches with the same result type (TAG_QUERY). Need UX team ideas on this
fixed tags and history icons based on Faaborg's mockup (and chat with him). Still lacking an icon for day containers, but bits added to css for future.
Actual issues:
- You can't sort items inside tag container (they inherit the sorting from the parent, so in Library they are sorted by title, in Recent tags are sorted by last dateAdded)
- You can't drop an item into a tag container to add a tag, imho is not a so blocking feature so it could be addressed in a followup
- You need a new profile
Mano, could you take a first review on this?
Comment on attachment 312306 [details] [diff] [review]
patch v7
<MaK77> so we always have lastModified filled
<Mano> that's pretty bad
<Mano> i don't want last modified visible for new bookmarks
<Mano> but we can fix that in the front end
<Mano> add to treeview.js please
<Mano> if == dateAdded return "" etc.
<Mano> + // parent parameter
+ if (aQuery->Folders().Length() == 1) {
+ rv = statement->BindInt64Parameter(index.For(":parent"),
+ aQuery->Folders()[0]);
+ NS_ENSURE_SUCCESS(rv, rv);
+ }
<Mano> we could have multiple folder set(!)
<Mano> this is done post-query elsewhere
<MaK77> multiple folder on a tag container?
<Mano> what would a place: string look like?
<MaK77> resultType=7&folder=X&other_options
<MaK77> folder=X points to the real tag folder
<Mano> can you comment above the 7 constant that parnet= works differently in that mode
<Mano> sorry, above parent;
<Mano> sorry, above setFolders
<Mano> that 1. It's not recursive 2. It must be a tag folder 3. Multiple folders are ignored
<Mano> + // if we are child of an ExcludeItems root, we should not expand
+ if (mResult && mResult->mRootNode->mOptions->ExcludeItems())
+ return PR_FALSE;
<Mano> are all queries just-itesms now?
<Mano> you need to check the resulttype there, i think
<MaK77> in the library left pane we have TAG_QUERY 2 times
<Mano> could be either RESULT_TYPE_URI or the new one, right?
<MaK77> one for the TAGS container, one for the smart bookmarks
<Mano> i know what this is for
<Mano> but I'm pretty sure we've got some queries that result in containers
<MaK77> but excluditems is ignored for those queries
<Mano> where do you ignore it?
<MaK77> CanExpand calls CanAlwaysExpand
<Mano> _ah_
<MaK77> and haschildren check if they have some container inside
<Mano> ok, comment on that in CanExapnd.
<Mano> that CanAlwaysExapnd handles container-queries
<Mano> maybe just rename canalwyasexapnd to IsContainersQuery
<Mano> for container queries,
<Mano> is mChildren valid even when the container is closed?
<MaK77> mh! i have to open it probably before.. that could explain why i was not immediately getting the expand glyph
<MaK77> so i open the container and then check mChildre.count(), right?
<Mano> I'm not sure if that wouldn't break the view...
<Mano> you need to 1. If it's open, just check
<Mano> 2. If it's not. Null the view (and keep it in a var), open the container, check, close the container, reset the view
<MaK77> this code previously was doing
<MaK77> if (mContentsValid) {
<MaK77> *aHasChildren = (mChildren.Count() > 0);
<MaK77> so if mContentsValid the container could be already open
<Mano> right
<Mano> and then we should the twisty till you try to open the query
<Mano> you could keep it as is, and just handle the _tags_ query some other way
<Mano> (check if any tags exist)
<Mano> it's the only visible containers-query that we care of that much
<MaK77> but then, what will happen when doing the same for splitting history?
<Mano> we'll special case that too (which is even much easier)
<Mano> we cannot just open the query as a general solution
<Mano> and we can fall back to the general solution above otherwise.
<Mano> as long as you only do so for containers-queries.
<Mano> for items queries _without_ excludeItems set, I'm fine with showing the twisty.
<Mano> you can do that in a follow up, in this one i would just continue to return true unless it's the tags query
Created attachment 314336 [details] [diff] [review]
patch v8
Additional fixes from previous version:
- addressed Mano comments
- drag & drop from/to tag containers works again
- dropping an history item into a tag container adds it to unfiled bookmarks (this should solve bug 410196)
- lastModified is no longer required on all items (db size saving), it was bogus since was dependant on the order in which sqlite was executing the queries (so if lastModified item was contained in tag we could had hidden items). Now results are post-filtered in FilterResultSet, so they should be consistent.
- disabled inserting into tag containers (context menu fix, inserted items would be hidden). Should be fixed adding a new bookmark in unfiled bookmarks, then taggin it, but that's an edge case imo.
- dragging from a tag container should result in a copy op to avoid moving the real bookmark.
- removed all styling bits for icons, Mano is fixing them in another blocker
Actual issues:
- You can't permanently sort items inside tag container, nor sorting tag containers, still can sort them in the Library.
- You need a new profile (bug 425161 will solve this)
- needs a unit test to ensure that TAGGED_URI is returning correct titles (can be done later though)
Can we rename RESULTS_AS_TAGGED_URI to something like RESULTS_AS_TAG_CONTAINER_ CONTENTS and explain in the interface what do you mean by "special title". Please also move the additional setFolders documentation to the IDL.
Comment on attachment 314336 [details] [diff] [review]
patch v8
>Index: toolkit/components/places/src/utils.js
>RCS file: /cvsroot/mozilla/toolkit/components/places/src/utils.js,v
>retrieving revision 1.13
>diff -u -8 -p -r1.13 utils.js
>--- toolkit/components/places/src/utils.js 7 Apr 2008 15:59:30 -0000 1.13
>+++ toolkit/components/places/src/utils.js 8 Apr 2008 14:00:36 -0000
>@@ -250,16 +250,18 @@ var PlacesUtils = {
> * they cannot be removed depending on the circumstance)
> * @param aNode
> * A result node
> * @returns true if the node is readonly, false otherwise
> */
> nodeIsReadOnly: function PU_nodeIsReadOnly(aNode) {
> if (this.nodeIsFolder(aNode))
> return this.bookmarks.getFolderReadonly(asQuery(aNode).folderItemId);
>+ if (this.nodeIsTagQuery(aNode))
>+ return false;
> if (this.nodeIsQuery(aNode))
> return asQuery(aNode).childrenReadOnly;
&& ! just_check_the_type_run_as_query_once ;)
> * Determines whether or not a ResultNode is a host container.
> * @param aNode
>@@ -284,16 +286,28 @@ var PlacesUtils = {
> return aNode.type == Ci.nsINavHistoryResultNode.RESULT_TYPE_QUERY &&
> aNode.parent &&
> ((resultType = asQuery(aNode.parent).queryOptions.resultType) ==
> Ci.nsINavHistoryQueryOptions.RESULTS_AS_DATE_QUERY ||
> resultType == Ci.nsINavHistoryQueryOptions.RESULTS_AS_DATE_SITE_QUERY);
> },
> /**
>+ * Determines whether or not a ResultNode is a tag container.
nit: result-node
>+ * @param node
>+ * A NavHistoryResultNode
>+ * @returns true if the node is a tag container, false otherwise
>+ */
>+ nodeIsTagQuery: function PU_nodeIsTagQuery(aNode) {
>+ return aNode.type == Ci.nsINavHistoryResultNode.RESULT_TYPE_QUERY &&
>+ asQuery(aNode).queryOptions.resultType ==
>+ Ci.nsINavHistoryQueryOptions.RESULTS_AS_TAGGED_URI;
>+ },
why do we need to check both?
> getConcreteItemId: function PU_getConcreteItemId(aNode) {
> if (aNode.type == Ci.nsINavHistoryResultNode.RESULT_TYPE_FOLDER_SHORTCUT)
> return asQuery(aNode).folderItemId;
>+ else if (PlacesUtils.nodeIsQuery(aNode)) {
>+ // Some queries (i.e. RESULTS_AS_TAGGED_URI) are similar to folder
>+ // shortcuts, so we can still get the concrete itemId for them.
>+ var queries = asQuery(aNode).getQueries({});
>+ if (queries.length == 1) {
>+ var folders = queries[0].getFolders({});
>+ if (folders.length == 1)
>+ return folders[0];
>+ }
>+ }
I don't like messing with getConcreteItemId for this, or anything which pretends to support this "globally". For starters, when the result type is not RESULTS_AS_TAGGED_URI, options.folders is recursive, thus this doesn't apply at all.
>Index: browser/components/places/content/controller.js
> _canInsert: function PC__canInsert() {
>- return this._view.insertionPoint != null;
>+ // don't allow inserting into Tag Containers
>+ var ip = this._view.insertionPoint;
>+ return ip != null &&
>+ PlacesUtils.bookmarks.getFolderIdForItem(ip.itemId) !=
We *must* avoid running statements like this during command update, cannot you check the parent's result type?
> if (PlacesUtils.nodeIsFolder(node))
> removedFolders.push(node);
>+ else if (PlacesUtils.nodeIsTagQuery(node.parent)) {
>+ var queries = asQuery(node.parent).getQueries({});
>+ if (queries.length == 1) {
>+ var folders = queries[0].getFolders({});
>+ if (folders.length == 1) {
>+ var uri = PlacesUtils._uri(node.uri);
>+ // extract tag title from the generating query
>+ var tag = PlacesUtils.bookmarks.getItemTitle(folders[0]);
>+ // if tag is empty we would delete all tags from an uri
>+ if (tag)
>+ transactions.push(PlacesUIUtils.ptm.untagURI(uri, tag));
untagURI can take the itemId.
>+ }
>+ }
>+ continue;
>+ }
> transactions.push(PlacesUIUtils.ptm.removeItem(node.itemId));
> }
> },
> /**
> * Removes the set of selected ranges from bookmarks.
> * @param txnName
>@@ -1332,19 +1351,38 @@ var PlacesControllerDragHelper = {
> // drag multiple elts upward: need to increment index or each successive
> // elt will be inserted at the same index, each above the previous.
> if ((index != -1) && ((index < unwrapped.index) ||
> (unwrapped.folder && (index < unwrapped.folder.index)))) {
> index = index + movedCount;
> movedCount++;
> }
>- transactions.push(PlacesUIUtils.makeTransaction(unwrapped,
>- flavor.value, insertionPoint.itemId,
>- index, copy));
>+ // if dragging over a tag container we should tag the item
>+ var parent = PlacesUtils.bookmarks.getFolderIdForItem(insertionPoint.itemId);
>+ if (parent == PlacesUtils.tagsFolderId) {
>+ var uri = PlacesUtils._uri(unwrapped.uri);
>+ // if uri is not bookmarked we should add it to unsorted bookmarks
>+ var bmkIds = PlacesUtils.bookmarks.getBookmarkIdsForURI(uri, {});
>+ if (bmkIds.length == 0) {
use PlacesUtils.getMostRecentBookmarkForURI
>+ transactions.push(PlacesUIUtils.ptm.createItem(uri,
>+ PlacesUtils.unfiledBookmarksFolderId,
>+ PlacesUtils.bookmarks.DEFAULT_INDEX,
>+ unwrapped.title));
>+ }
>+ var tag = PlacesUtils.bookmarks.getItemTitle(insertionPoint.itemId);
>+ // don't try to add an empty tag
>+ if (tag)
>+ transactions.push(PlacesUIUtils.ptm.tagURI(uri, tag));
tagURI can do so too.
>+ }
>+ else {
>+ transactions.push(PlacesUIUtils.makeTransaction(unwrapped,
>+ flavor.value, insertionPoint.itemId,
>+ index, copy));
>+ }
>Index: browser/components/places/content/menu.xml
>RCS file: /cvsroot/mozilla/browser/components/places/content/menu.xml,v
>retrieving revision 1.127
>diff -u -8 -p -r1.127 menu.xml
>--- browser/components/places/content/menu.xml 6 Apr 2008 19:41:08 -0000 1.127
>+++ browser/components/places/content/menu.xml 8 Apr 2008 14:00:39 -0000
>@@ -184,22 +184,24 @@
> ]]></body>
> </method>
> <method name="onDragStart">
> <parameter name="aEvent"/>
> <parameter name="aXferData"/>
> <parameter name="aDragAction"/>
> <body><![CDATA[
>- if (aEvent.ctrlKey)
>+ if (aEvent.ctrlKey ||
>+ PlacesUtils.nodeIsTagQuery(aEvent.target.node.parent))
> aDragAction.action = Ci.nsIDragService.DRAGDROP_ACTION_COPY;
nodeIsQuery makes better sense here, I think.
>Index: browser/components/places/content/tree.xml
>RCS file: /cvsroot/mozilla/browser/components/places/content/tree.xml,v
>retrieving revision 1.111
>diff -u -8 -p -r1.111 tree.xml
>--- browser/components/places/content/tree.xml 14 Mar 2008 00:52:21 -0000 1.111
>+++ browser/components/places/content/tree.xml 8 Apr 2008 14:00:40 -0000
>@@ -198,16 +198,18 @@
> nodesURIChecked.push(containerURI);
> var wasOpen = container.containerOpen;
> if (!wasOpen)
> container.containerOpen = true;
> for (var i = 0; i < container.childCount; ++i) {
> var child = container.getChild(i);
> var childURI = child.uri;
>+ // remove excludeitems option
>+ childURI = childURI.replace("&excludeItems=1", "");
*ew*, why? I would rather unset in the caller, preferebally on a concrete query object.
>Index: browser/components/places/content/treeView.js
>RCS file: /cvsroot/mozilla/browser/components/places/content/treeView.js,v
>retrieving revision 1.61
>diff -u -8 -p -r1.61 treeView.js
>--- browser/components/places/content/treeView.js 8 Apr 2008 05:51:23 -0000 1.61
>+++ browser/components/places/content/treeView.js 8 Apr 2008 14:00:42 -0000
>@@ -989,28 +989,38 @@ PlacesTreeView.prototype = {
> // The user cannot drop an item into itself or a read-only container
> var dragService = Cc["@mozilla.org/widget/dragservice;1"].
> getService(Ci.nsIDragService);
> var dragSession = dragService.getCurrentSession();
> var elt = dragSession.sourceNode.parentNode;
> if (elt.localName == "tree" && elt.view == this &&
> this.selection.isSelected(aRow))
> return false;
>+ if (PlacesUtils.nodeIsTagQuery(node))
>+ return true;
> if (node.parent && PlacesUtils.nodeIsReadOnly(node.parent))
> return false;
> }
> var ip = this._t(aRow, aOrientation);
> return ip && PlacesControllerDragHelper.canDrop(ip);
Shouldn't _getInsertionPoint handle that?
Comment on attachment 314336 [details] [diff] [review]
patch v8
a few drive-by comments:
>@@ -4983,16 +5034,23 @@ nsNavHistory::BindQueryClauseParameters(
> // annotation
> if (NS_SUCCEEDED(aQuery->GetHasAnnotation(&hasIt)) && hasIt) {
> rv = statement->BindUTF8StringParameter(index.For(":anno"),
> aQuery->Annotation());
> NS_ENSURE_SUCCESS(rv, rv);
> }
>+ // parent parameter
>+ if (aQuery->Folders().Length() == 1) {
>+ rv = statement->BindInt64Parameter(index.For(":parent"),
>+ aQuery->Folders()[0]);
>+ NS_ENSURE_SUCCESS(rv, rv);
>+ }
fix indent
>@@ -5249,16 +5310,24 @@ nsNavHistory::FilterResultSet(nsNavHisto
> }
> // Skip if we don't match all terms in the title, url or tag
> if (!matchAll)
> continue;
> appendNode = PR_TRUE;
> }
>+ // RESULTS_AS_TAGGED_URI returns a set ordered by place_id and lastModified,
>+ // so, to remove duplicates, we can retain the first result for each uri.
>+ if (aOptions->ResultType() == nsINavHistoryQueryOptions::RESULTS_AS_TAGGED_URI) {
>+ if (nodeIndex > 0 && aSet[nodeIndex]->mURI == aSet[nodeIndex-1]->mURI)
>+ appendNode = PR_FALSE;
>+ }
you could get the result type outside the loop, instead of querying the options object each iteration.
also, is there a reason to not just continue in this case?
>@@ -5961,16 +6038,21 @@ GetSimpleBookmarksQueryFolder(const nsCO
> if (hasIt)
> return 0;
> (void)query->GetHasSearchTerms(&hasIt);
> if (hasIt)
> return 0;
> if (aOptions->MaxResults() > 0)
> return 0;
>+ // RESULTS_AS_TAGGED_URI is quite similar to a folder shortcut, but we must
>+ // avoid threating it like that, since we need to retain all query options.
>Index: toolkit/components/places/src/nsNavHistoryQuery.cpp
>RCS file: /cvsroot/mozilla/toolkit/components/places/src/nsNavHistoryQuery.cpp,v
>retrieving revision 1.37
>diff -u -8 -p -r1.37 nsNavHistoryQuery.cpp
>--- toolkit/components/places/src/nsNavHistoryQuery.cpp 15 Mar 2008 19:39:04 -0000 1.37
>+++ toolkit/components/places/src/nsNavHistoryQuery.cpp 8 Apr 2008 14:00:29 -0000
>@@ -1124,16 +1124,19 @@ NS_IMETHODIMP nsNavHistoryQuery::GetFold
> }
> NS_IMETHODIMP nsNavHistoryQuery::GetFolderCount(PRUint32 *aCount)
> {
> *aCount = mFolders.Length();
> return NS_OK;
> }
>+// For special result type RESULTS_AS_TAGGED_URI we can define only one folder
>+// that must be a tag folder. This is not recursive so results wll be catched
s/wll be catched/will be cached/
Created attachment 314715 [details] [diff] [review]
patch V9
new name is RESULTS_AS_TAG_CONTENTS
should have fixed all comments from Mano and Dietrich, thank you for support!
Actual issues:
- You can't permanently sort items inside tag container, nor sorting tag
containers, still can sort them in the Library.
- You need a new profile (bug 425161 will solve this)
- needs a unit test to ensure that TAGGED_URI is returning correct titles (can
be done later though)
Comment on attachment 314715 [details] [diff] [review]
patch V9
Please update menu.xml and toolbar.xml too to set isTag on their insertionpoint objects.
Other than that:
>Index: toolkit/components/places/src/nsNavHistoryResult.cpp
> nsNavHistoryQueryResultNode::GetHasChildren(PRBool* aHasChildren)
> {
>- if (! CanExpand()) {
>+ if (!CanExpand()) {
> *aHasChildren = PR_FALSE;
> return NS_OK;
> }
>+ PRUint16 resultType = mOptions->ResultType();
>+ // For tag containers query we must check if we have any tag
>+ if (resultType == nsINavHistoryQueryOptions::RESULTS_AS_TAG_QUERY) {
>+ nsresult rv;
>+ nsCOMPtr<nsITaggingService> tagsvc =
>+ do_GetService("@mozilla.org/browser/tagging-service;1", &rv);
>+ NS_ENSURE_SUCCESS(rv, rv);
>+ nsIVariant *tags;
>+ tagsvc->GetAllTags(&tags);
>+ *aHasChildren = ((nsTArray<PRUnichar*>*) tags)->Length() > 0;
>+ return NS_OK;
This leaks the tags array, doesn't it? I think it would be better to run a sql query here anyway.
>Index: browser/components/places/content/controller.js
> * Determines whether or not nodes can be inserted relative to the selection.
> */
> _canInsert: function PC__canInsert() {
>- return this._view.insertionPoint != null;
>+ var ip = this._view.insertionPoint;
>+ return ip != null && !ip.isTag;
It's optional ("undefined" in certain place, so please make that
var ip = this._view.insertionPoint;
return ip && ip.isTag != true;
>+ // if dragging over a tag container we should tag the item
>+ var parent = PlacesUtils.bookmarks.getFolderIdForItem(insertionPoint.itemId);
>+ if (parent == PlacesUtils.tagsFolderId) {
>+ var uri = PlacesUtils._uri(unwrapped.uri);
>+ var tagItemId = insertionPoint.itemId;
>+ transactions.push(PlacesUIUtils.ptm.tagURI(uri,[tagItemId]));
>+ }
Could we use isTag here too?
>Index: browser/components/places/content/tree.xml
>+ // allow dropping into single folder queries (like Tag containers)
>+ if (PlacesUtils.nodeIsQuery(aContainer)) {
>+ var queries = asQuery(aContainer).getQueries({});
>+ if (queries.length == 1) {
>+ var folders = queries[0].getFolders({});
>+ return folders.length != 1;
>+ }
>+ }
tag-query, not any query (ditto on treeView.js).
Created attachment 314826 [details] [diff] [review]
patch v10
we're near the light...
Added the unit test, fixed a minor problem with a failing unit tests, addressed comments.
Known issues for this version:
- You can't permanently sort items inside tag containers, nor sorting tag
containers, still can sort them in the Library.
- You need a new profile (bug 425161)
Comment on attachment 314826 [details] [diff] [review]
patch v10
>Index: toolkit/components/places/src/nsNavHistoryResult.cpp
>+ nsCOMPtr<mozIStorageStatement> hasTagsStatement;
>+ nsresult rv = dbConn->CreateStatement(NS_LITERAL_CSTRING(
>+ "SELECT id FROM moz_bookmarks WHERE parent = "
>+ "(SELECT folder_id FROM moz_bookmarks_roots WHERE root_name = 'tags') "
>+ getter_AddRefs(hasTagsStatement));
>+ NS_ENSURE_SUCCESS(rv, rv);
let's don't make this complicated, we've the tags root cached in few places.
>+ return hasTagsStatement->ExecuteStep(aHasChildren);
>+ }
>+ //XXX: For history containers query we must check if we have any history
>+ if (resultType == nsINavHistoryQueryOptions::RESULTS_AS_DATE_QUERY ||
>+ resultType == nsINavHistoryQueryOptions::RESULTS_AS_DATE_SITE_QUERY ||
>+ resultType == nsINavHistoryQueryOptions::RESULTS_AS_SITE_QUERY) {
>+ nsNavHistory* history = nsNavHistory::GetHistoryService();
>+ NS_ENSURE_TRUE(history, NS_ERROR_OUT_OF_MEMORY);
>+ history->GetHasHistoryEntries(aHasChildren);
>+ return NS_OK;
make that |return history->GetHasHistoryEntries(aHasChildren);|
>Index: toolkit/components/places/src/utils.js
>RCS file: /cvsroot/mozilla/toolkit/components/places/src/utils.js,v
>retrieving revision 1.14
>diff -u -8 -p -r1.14 utils.js
>--- toolkit/components/places/src/utils.js 8 Apr 2008 18:41:05 -0000 1.14
>+++ toolkit/components/places/src/utils.js 10 Apr 2008 11:50:48 -0000
>@@ -250,17 +250,19 @@ var PlacesUtils = {
> * they cannot be removed depending on the circumstance)
> * @param aNode
> * A result node
> * @returns true if the node is readonly, false otherwise
> */
> nodeIsReadOnly: function PU_nodeIsReadOnly(aNode) {
> if (this.nodeIsFolder(aNode))
> return this.bookmarks.getFolderReadonly(asQuery(aNode).folderItemId);
>- if (this.nodeIsQuery(aNode))
>+ if (this.nodeIsQuery(aNode) &&
>+ asQuery(aNode).queryOptions.resultType !=
>+ Ci.nsINavHistoryQueryOptions.RESULTS_AS_TAG_CONTENTS)
> return asQuery(aNode).childrenReadOnly;
This can be return |aNode.childrenReadOnly;| now.
> return false;
> },
> /**
> * Determines whether or not a ResultNode is a host container.
> * @param aNode
> * A result node
>@@ -284,16 +286,28 @@ var PlacesUtils = {
> return aNode.type == Ci.nsINavHistoryResultNode.RESULT_TYPE_QUERY &&
> aNode.parent &&
> ((resultType = asQuery(aNode.parent).queryOptions.resultType) ==
> Ci.nsINavHistoryQueryOptions.RESULTS_AS_DATE_QUERY ||
> resultType == Ci.nsINavHistoryQueryOptions.RESULTS_AS_DATE_SITE_QUERY);
> },
> /**
>+ * Determines whether or not a result-node is a tag container.
>+ * @param node
>+ /**
> * Determines whether or not a ResultNode is a container.
> * @param aNode
> * A result node
> * @returns true if the node is a container item, false otherwise
> */
> containerTypes: [Ci.nsINavHistoryResultNode.RESULT_TYPE_FOLDER,
> Ci.nsINavHistoryResultNode.RESULT_TYPE_FOLDER_SHORTCUT,
> Ci.nsINavHistoryResultNode.RESULT_TYPE_QUERY,
>@@ -371,16 +385,26 @@ var PlacesUtils = {
> /**
> * Gets the concrete item-id for the given node. Generally, this is just
> * node.itemId, but for folder-shortcuts that's node.folderItemId.
> */
> getConcreteItemId: function PU_getConcreteItemId(aNode) {
> if (aNode.type == Ci.nsINavHistoryResultNode.RESULT_TYPE_FOLDER_SHORTCUT)
> return asQuery(aNode).folderItemId;
>+ else if (PlacesUtils.nodeIsTagQuery(aNode)) {
>+ // RESULTS_AS_TAG_CONTENTS queries are similar to folder shortcuts
>+ // so we can still get the concrete itemId for them.
>+ var queries = asQuery(aNode).getQueries({});
You don't need QI here either, nodeIsTagQuery does that for you.
>+ if (queries.length == 1) {
>+ var folders = queries[0].getFolders({});
>+ if (folders.length == 1)
>+ return folders[0];
I wouldn't bother checking the lengths.
In which case RESULTS_AS_TAG_CONTENTS can result in multiple queries anyway?
>Index: browser/components/places/content/tree.xml
> <method name="_disallowInsertion">
> <parameter name="aContainer"/>
> <body><![CDATA[
>+ // allow dropping into like Tag containers
>+ if (PlacesUtils.nodeIsTagQuery(aContainer)) {
>+ var queries = asQuery(aContainer).getQueries({});
>+ if (queries.length == 1) {
>+ var folders = queries[0].getFolders({});
>+ return folders.length != 1;
>+ }
see previous comments.
>Index: browser/components/places/content/treeView.js
> _disallowInsertion: function PTV__disallowInsertion(aContainer) {
>+ // allow dropping into Tag containers
>+ if (PlacesUtils.nodeIsTagQuery(aContainer)) {
>+ var queries = asQuery(aContainer).getQueries({});
>+ if (queries.length == 1) {
>+ var folders = queries[0].getFolders({});
>+ return folders.length != 1;
>+ }
>+ }
r=mano otherwise. Many thanks for this awesome work.
Created attachment 315106 [details] [diff] [review]
patch v11
drivers: this patch is needed to handle properly tag contents, and will fix other tag containers blockers
Comment on attachment 315106 [details] [diff] [review]
patch v11
a=beltzner, please watch for regressions and omgzorz yay!
Checking in browser/components/places/content/controller.js;
/cvsroot/mozilla/browser/components/places/content/controller.js,v <-- controller.js
new revision: 1.225; previous revision: 1.224
Checking in browser/components/places/content/menu.xml;
/cvsroot/mozilla/browser/components/places/content/menu.xml,v <-- menu.xml
new revision: 1.128; previous revision: 1.127
Checking in browser/components/places/content/toolbar.xml;
/cvsroot/mozilla/browser/components/places/content/toolbar.xml,v <-- toolbar.xml
new revision: 1.150; previous revision: 1.149
Checking in browser/components/places/content/tree.xml;
/cvsroot/mozilla/browser/components/places/content/tree.xml,v <-- tree.xml
new revision: 1.112; previous revision: 1.111
Checking in browser/components/places/content/treeView.js;
/cvsroot/mozilla/browser/components/places/content/treeView.js,v <-- treeView.js
new revision: 1.63; previous revision: 1.62
Checking in browser/components/places/content/utils.js;
/cvsroot/mozilla/browser/components/places/content/utils.js,v <-- utils.js
new revision: 1.134; previous revision: 1.133
Checking in browser/components/places/src/nsPlacesTransactionsService.js;
/cvsroot/mozilla/browser/components/places/src/nsPlacesTransactionsService.js,v <-- nsPlacesTransactionsService.js
new revision: 1.40; previous revision: 1.39
Checking in toolkit/components/places/public/nsINavHistoryService.idl;
/cvsroot/mozilla/toolkit/components/places/public/nsINavHistoryService.idl,v <-- nsINavHistoryService.idl
new revision: 1.82; previous revision: 1.81
Checking in toolkit/components/places/src/nsNavBookmarks.cpp;
/cvsroot/mozilla/toolkit/components/places/src/nsNavBookmarks.cpp,v <-- nsNavBookmarks.cpp
new revision: 1.160; previous revision: 1.159
Checking in toolkit/components/places/src/nsNavHistory.cpp;
/cvsroot/mozilla/toolkit/components/places/src/nsNavHistory.cpp,v <-- nsNavHistory.cpp
new revision: 1.290; previous revision: 1.289
Checking in toolkit/components/places/src/nsNavHistoryQuery.cpp;
/cvsroot/mozilla/toolkit/components/places/src/nsNavHistoryQuery.cpp,v <-- nsNavHistoryQuery.cpp
new revision: 1.38; previous revision: 1.37
Checking in toolkit/components/places/src/nsNavHistoryResult.cpp;
/cvsroot/mozilla/toolkit/components/places/src/nsNavHistoryResult.cpp,v <-- nsNavHistoryResult.cpp
new revision: 1.140; previous revision: 1.139
Checking in toolkit/components/places/src/nsNavHistoryResult.h;
/cvsroot/mozilla/toolkit/components/places/src/nsNavHistoryResult.h,v <-- nsNavHistoryResult.h
new revision: 1.56; previous revision: 1.55
Checking in toolkit/components/places/src/utils.js;
/cvsroot/mozilla/toolkit/components/places/src/utils.js,v <-- utils.js
new revision: 1.15; previous revision: 1.14
RCS file: /cvsroot/mozilla/toolkit/components/places/tests/unit/test_419731.js,v
Checking in toolkit/components/places/tests/unit/test_419731.js;
/cvsroot/mozilla/toolkit/components/places/tests/unit/test_419731.js,v <-- test_419731.js
initial revision: 1.1
+ // For history containers query we must check if we have any history
+ if (resultType == nsINavHistoryQueryOptions::RESULTS_AS_DATE_QUERY ||
+ resultType == nsINavHistoryQueryOptions::RESULTS_AS_DATE_SITE_QUERY ||
+ resultType == nsINavHistoryQueryOptions::RESULTS_AS_SITE_QUERY) {
+ nsNavHistory* history = nsNavHistory::GetHistoryService();
+ NS_ENSURE_TRUE(history, NS_ERROR_OUT_OF_MEMORY);
+ return history->GetHasHistoryEntries(aHasChildren);
+ }
I would also use the IsContainersQuery() function there, so have one thing less to change, if there's a new container query type.
IsContainersQuery() includes (an could potentially future-include) also non history queries...
verified with:
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9pre) Gecko/2008041804 Minefield/3.0pre
Bug 451915 - move Firefox/Places bugs to Firefox/Bookmarks and History. Remove all bugspam from this move by filtering for the string "places-to-b-and-h".
In Thunderbird 3.0b, you do that as follows:
Tools | Message Filters
Make sure the correct account is selected. Click "New"
Conditions: Body contains places-to-b-and-h
Change the action to "Delete Message".
Select "Manually Run" from the dropdown at the top.
Click OK.
Select the filter in the list, make sure "Inbox" is selected at the bottom, and click "Run Now". This should delete all the bugspam. You can then delete the filter.


text:
Cole Haan
'Air Mariela' Pump
Product not available
Have questions?
Chat with us or call 1.888.282.6060.
HideDetails & Care
Oiled vachetta leather shapes a versatile peep-toe pump outfitted with Nike Air® cushioning and perched atop a wrapped heel and platform.
- Approx. heel height: 4 1/2" with 1" platform (comparable to a 3 1/2" heel).
- Vachetta leather upper/leather lining and sole.
- By Cole Haan; imported.
- Women's Shoes.


text:
Posts: 90
Registered: 08-13
The level before this one was child's play compared to what we have to deal with now. There are 212 monsters in this map, and fortunately we have enough ammo to deal with them all. You will have to keep moving in the first part of this map as there is no place to hide until you take care of at least 70 monsters in the hallways. Then you have to deal with finding all of the confusing switches and teleporters that are disguised throughout the level. I get close to dying in a few parts of the map, as well. This was a fun map to play in spite of my frustrations.
For some reason I thought this level was a lot harder than it actually is - or maybe I practiced a bit before I played it? Anyway, there are a lot of stairs in this map, but none so great as the final few flights. There is a maulotaur at the end, so reserve a Tome of Power for him. Otherwise, be careful because the wereminotaurs can hurt in close quarters, as well as the barrage of ophidians you'll have to deal with.
Posts: 15195
Registered: 07-07
Posts: 2419
Registered: 08-13
Gez said:
This map is far easier than The Great Stair, but is not going to be as easy as the next map. The only issue in this map are large groups of gargoyles and large groups of Disciples, but they are all manageable. For some reason, this map has a lot of strange sprite glitches when I kill some enemies, as you'll see. Also, there is a kind of tricky jump in the map, but it's not too terrible with practice.
This is a very substantial level. It's moderately difficult, and it is a nice castle level with ramparts, parapets, and even a gallows. The final secrets in this level are rather confusing, so I have made some cuts to save time. There are a TON of Disciples in this level, so keep your spray and pray weapons ready. The Iron Liches towards the end aren't too terrible, but try to attack them from the windows. Thankfully, there aren't as many gargoyles as there were the last level - but they're still annoying.
It's finally time to end The Ossuary. The final level involves a 'shattered bridge' that rises in segments, a a whole boatload of golems and fire golems which proves that they can really be difficult in large numbers. The level has a northern and southern end to it, and if you can, save your items for the very end as much as possible. One invincibility ring and the phoenix rod should be enough for the last set of enemies, but if you do run out, bail and deal with them one by one as much as possible. What will we face in the next episode?
Some people would argue that this level is the most difficult level in the entire game. I would argue that it is only the 2nd most difficult level. It's a pain in the neck to finish, but unlike the Catafalque, it actually gives you plenty of ammo - so I never really worried about running out as much as I did in E4M1. The enemies are hard, yes, and the first part reminds me a lot of The Mausoleum. My advice is to get the gauntlets, and get the first Tome of Power as quickly as possible. Hide and fight, rinse and repeat until you're done. The very last section is extremely difficult and will kill you if you're unprepared for it. My advice is to trigger the enemies to show up and then leave as fast as you can through one of the teleports. Even if the 'big guy' is trapped he can still kill you with one of his attacks - and he almost did.
Yes, let's play 'the Heretic'. Apart from bumbling through my words a bit - this is a fairly easy level compared to the last two levels. As you can suggest from the title, there's a lot of moving water, but it's not so bad that it makes things too difficult. I would save your items and the final enchanted shield for the next level since we really don't need it here that much.
It's time to get back into playing Heretic. This level features a nice 'dock' with several ingresses and egresses - all blocked off by particular color keys. This level also has plenty of Iron Liches, but we're able to dispatch them without a problem. The Maulotaur in this level caught me by surprise the first time I saw it but you have plenty of open space to take care of it. Don't forget that there is a secret exit...
This level may look short on paper, but with its winding corridors and keys at the opposite ends of the level, it can be very long. I suppose it does look like a bit of yard on the map, but maybe they were running out of ideas for titles? D'Sparil is dead right now anyway so I'm not sure what he needs knitting for anyways. There are a ton of ophidians in this level, so be on the lookout for that.
Unlike the Doom II level of the same name, there isn't really much of a courtyard in this level. There are plenty of Iron Liches, and our old friend The Maulotaur returns. I also waste a wings of wrath attempting to get one item, but oh well, that's life. The levels are really getting to be much better in the way of design, and I'm really starting to enjoy this episode.
This level is difficult namely due to the fact that there are so many damned enemies (over 200). The fire golems en masse can cause a lot of damage, and of course most of the other enemies have the ghost flag set as well. Coupled with the fact that there are a lot of narrow corridors with doors that can trap you, you really have to watch your toes in this map.
Apparently, a collonade is a row of columns supporting a roof, and I suppose we have that in a manner of speaking. There are a LOT of enemies in this level, and some are quite hidden. Thankfully there are no maulotaurs, but maybe the game will make up for that later? This level can be very confusing with the switch puzzles, but thankfully it's nowhere near as bad as Hexen.
This is by far one of the most stunning levels in the entire episode, if not the entire game. It's moderately challenging, well thought out, and is just long enough to not be too tedious - if you know where the switches are. Don't worry about conserving ammo, but do conserve at least one of each of all your items...
It's finally time to wrap up this game. This video is in two parts. The first part was recorded a few days ago and covers the final level of Heretic. It's not too tricky as long as you use your items wisely and keep moving. Just erode the maulotaurs one by one and you'll make it without a problem. The second part (recorded on another mic, sorry) covers the other three levels of Heretic included with the game, as well as the cheat codes. Somehow the developers liked chickens? Anyway, thank you for watching this LP and sticking through to the end!
Valkhorn said:
Part 043 - E5M6: Collonade
Posts: 1856
Registered: 02-06
Posts: 2
Registered: 12-13
LorcanWard said:
as far as I can remember the Steam bundle I bought didn't have these add-on.
Posts: 940
Registered: 10-00
WhamNinjaMolehill <-- check out my YouTube Channel
< Contact Us - Doomworld
Powered by vBulletin
Copyright vBulletin Solutions, Inc.